Я використовував базу даних графіків у попередньому завданні. Ми не використовували neo4j, це була внутрішня річ, побудована на базі Берклі DB, але це було схоже. Він використовувався у виробництві (він досі є).
Причиною, по якій ми використовували базу даних графіків, було те, що дані, що зберігаються системою, і операції, які система робила з даними, були саме слабким місцем реляційних баз даних і були саме сильним місцем баз даних графіків. Системі, необхідній для зберігання колекцій об'єктів, яким не вистачає фіксованої схеми і пов'язані між собою відносинами. Для того, щоб міркувати про дані, системі потрібно було зробити багато операцій, які б були парами обходу в базі даних графіків, але це були б досить складні запити в SQL.
Основними перевагами графічної моделі були швидкий час розробки та гнучкість. Ми могли швидко додати нову функціональність, не впливаючи на існуючі розгортання. Якщо потенційний клієнт хотів імпортувати частину власних даних і перенести їх на нашу модель, зазвичай це може зробити на місці представник відділу продажів. Гнучкість також допомогла, коли ми розробляли нову функцію, рятуючи нас від спроб видавити нові дані в жорстку модель даних.
Маючи дивну базу даних, ми зможемо побудувати масу інших наших дивних технологій, надаючи нам багато секретного соусу, щоб відрізнити наш продукт від продуктів наших конкурентів.
Основним недоліком було те, що ми не використовували стандартну реляційну базу даних, що може бути проблемою, коли ваші клієнти є підприємливими. Наші клієнти запитують, чому ми не могли просто розмістити наші дані на своїх гігантських кластерах Oracle (зазвичай наші клієнти мали великі центри обробки даних). Одна з команди фактично переписала шар бази даних для використання Oracle (або PostgreSQL, або MySQL), але це було трохи повільніше, ніж оригінал. Принаймні одне велике підприємство навіть проводило політику, що стосується лише Oracle, але, на щастя, Oracle купив Berkeley DB. Нам також довелося написати багато додаткових інструментів - ми не могли просто використати Crystal Reports, наприклад.
Іншим недоліком нашої бази даних графіків було те, що ми створили її самостійно, а це означає, що коли ми стикаємося з проблемою (як правило, з масштабованістю), ми мали її вирішити самостійно. Якби ми використовували реляційну базу даних, постачальник уже вирішив би проблему десять років тому.
Якщо ви будуєте продукт для корпоративних клієнтів, і ваші дані вписуються у реляційну модель, використовуйте реляційну базу даних, якщо можете. Якщо ваша програма не відповідає реляційній моделі, але вона відповідає графічній моделі, використовуйте базу даних графіків. Якщо вам підходить лише щось інше, використовуйте це.
Якщо вашій програмі не потрібно вписуватися в поточну архітектуру blub, використовуйте графічну базу даних, або CouchDB, або BigTable, або все, що відповідає вашому додатку, і ви вважаєте, що це здорово. Це може дати вам перевагу та весело пробувати нові речі.
Що б ви не вибрали, намагайтеся не створювати двигун бази даних самостійно, якщо вам не подобається створення двигунів бази даних.