Після кількох років проживання в просторі "NoSQL", тепер у мене є проблема, яка є досить "реляційною" за своєю суттю. Сьогодні я бачу сховища даних зовсім іншими очима, ніж раніше. Такі речі, як Riak, зіпсували мене таким чином, що я більше не можу терпіти поодинокі пункти відмови, «вниз на технічне обслуговування» і т. Д. Звичайно, (або, сподіваюся), я не втратив розуму повністю. Це особистий проект, який не зовсім (або поки що) не має надзвичайно високих вимог.
Більшість ріжучих рішень не дають мені того, чого я хочу (принаймні, на перший погляд), ймовірно, тому, що мою проблему досить "легко" вирішити. Принаймні на концептуальному рівні (ігнорування обмежень, які самі RDBM вносять до таблиці).
У мене є невелика кількість "спільних" даних, які можна вільно дублювати. Він не вимагає жорсткої консистенції. Це може бути збережено в динамоподібній базі даних і буде масштабуватися нескінченно. Але я все-таки хотів би, якщо можливо, перейти з єдиною базою даних.
У мене дуже багато даних "на кожного користувача". Тобто - безліч користувачів, кожен користувач яких має дані абсолютно розумного розміру, дійсно підходить для зберігання в одному вузлі PostgreSQL. Ми максимум про 10 тисяч тисяч записів.
Мені ніколи не потрібно запитувати перехресного користувача, і мені не потрібна атомність між користувачами.
Це звучить надзвичайно просто. Принаймні, коли я дивлюся на це своїми "очима NoSQL".
Ось мої наївні ідеї для початківців:
На самому крайньому рахунку я міг просто серіалізувати цілого користувача як єдиний ключ / значення в Riak. Звичайно, постійна де / серіалізація декількох мегабайт даних буде повільною, і саме тому я розглядаю можливість використання PostgreSQL. Багато Riak K / Vs заборонено, оскільки мені потрібні атомарність / транзакції в межах даних кожного користувача.
Я міг би використовувати базу даних SQLite на користувача та використовувати щось на зразок GlusterFS для надмірності / доступності. Це, мабуть, рішення, яке я виберу, якщо я не можу знайти щось настільки ж добре за допомогою PostgreSQL. Плюси: дійсно добре знижувати / збільшувати масштаб; Мінуси: я вважаю за краще типи та суворість PostgreSQL над SQLite
Отже, що я б в ідеалі вимагав від рішення для загострення PostgreSQL:
- Автоматично зберігайте кілька копій даних кожного користувача навколо (на різних машинах). Вміти динамічно перемикати головний вузол на користувача / фрагмента (якщо попередній майстер знижується).
- Вміти динамічно збільшувати / зменшувати масштаб, додаючи / видаляючи вузли сервера. Здебільшого, як це вміє робити Riak.
- Не вимагайте від моєї програми, щоб знати, з якими вузлами поговорити і коли.