W poprzedniej pracy korzystałem z graficznej bazy danych. Nie używaliśmy neo4j, to była wewnętrzna rzecz zbudowana na bazie Berkeley DB, ale była podobna. Był używany w produkcji (nadal jest).
Powodem, dla którego użyliśmy grafowej bazy danych, było to, że dane przechowywane przez system i operacje, które system wykonywał na danych, były dokładnie słabym punktem relacyjnych baz danych i były dokładnie mocnym punktem grafowych baz danych. System musiał przechowywać kolekcje obiektów, które nie mają ustalonego schematu i są połączone ze sobą relacjami. Aby uzasadnić te dane, system musiał wykonać wiele operacji, które byłyby kilkoma przechodzeniami w bazie danych wykresów, ale byłyby to dość złożone zapytania w języku SQL.
Głównymi zaletami modelu wykresu był szybki czas rozwoju i elastyczność. Mogliśmy szybko dodać nowe funkcje bez wpływu na istniejące wdrożenia. Gdyby potencjalny klient chciał zaimportować własne dane i przeszczepić je na nasz model, zwykle mógłby to zrobić na miejscu przedstawiciel handlowy. Elastyczność pomogła również podczas projektowania nowej funkcji, chroniąc nas przed próbami wtłaczania nowych danych do sztywnego modelu danych.
Posiadanie dziwnej bazy danych pozwoliło nam zbudować wiele innych naszych dziwnych technologii, dając nam wiele sekretów, aby odróżnić nasz produkt od produktów konkurencji.
Główną wadą było to, że nie korzystaliśmy ze standardowej technologii relacyjnych baz danych, co może stanowić problem, gdy Twoi klienci są przedsiębiorczy. Nasi klienci pytaliby, dlaczego nie możemy po prostu hostować naszych danych w ich gigantycznych klastrach Oracle (nasi klienci zwykle mają duże centra danych). Jeden z członków zespołu faktycznie przepisał warstwę bazy danych, aby korzystała z Oracle (lub PostgreSQL lub MySQL), ale była nieco wolniejsza niż oryginał. Co najmniej jedno duże przedsiębiorstwo miało nawet politykę dotyczącą wyłącznie Oracle, ale na szczęście Oracle kupiło Berkeley DB. Musieliśmy także napisać wiele dodatkowych narzędzi - nie mogliśmy na przykład po prostu używać Crystal Reports.
Inną wadą naszej bazy danych grafów było to, że sami ją zbudowaliśmy, co oznaczało, że kiedy napotkaliśmy problem (zwykle ze skalowalnością), musieliśmy go rozwiązać samodzielnie. Gdybyśmy użyli relacyjnej bazy danych, sprzedawca rozwiązałby problem już dziesięć lat temu.
Jeśli tworzysz produkt dla klientów korporacyjnych, a Twoje dane pasują do modelu relacyjnego, jeśli możesz, użyj relacyjnej bazy danych. Jeśli Twoja aplikacja nie pasuje do modelu relacyjnego, ale pasuje do modelu wykresu, użyj bazy danych wykresów. Jeśli pasuje tylko do czegoś innego, użyj tego.
Jeśli Twoja aplikacja nie musi pasować do obecnej architektury blub, użyj graficznej bazy danych, CouchDB, BigTable lub czegokolwiek, co pasuje do Twojej aplikacji i uważasz, że jest fajne. Może dać ci przewagę i fajnie jest próbować nowych rzeczy.
Cokolwiek wybierzesz, staraj się nie budować silnika bazy danych samodzielnie, chyba że naprawdę lubisz budować silniki bazy danych.