Відповіді:
Прості текстові файли у файловій системі
XML або JSON файли на диску
Файл електронних таблиць / CSV
Subversion (або подібна система управління версією на диску)
Берклі БД (в основному, дисковий хештет на основі диска)
Магазин даних Google App Engine
Колекції рідної мови (зберігаються в пам'яті або серіалізуються на диску)
Спеціальна (рукописна) система зберігання даних
Я не можу стверджувати, що знаю про них багато, але ви також можете хотіти заглянути в об'єктні бази даних .
Відповідь Метта Шеппарда чудова (модифікація), але я б врахував ці фактори, коли думав про веретено:
Однією особливою перевагою файлів CSV перед RDBMSes є те, що вони можуть легко конденсуватися та переміщуватися практично до будь-якої іншої машини. Ми робимо великі передачі даних, і все досить просто, ми просто використовуємо один великий CSV-файл і простий у сценарії, використовуючи такі інструменти, як rsync. Щоб зменшити повторення великих файлів CSV, ви можете використовувати щось на зразок YAML . Я не впевнений, що я б зберігав щось на зразок JSON або XML, якщо б у вас не було значних вимог щодо відносин.
Що стосується не згаданих альтернатив, не варто знижувати Hadoop , що є реалізацією MapReduce з відкритим кодом. Це має спрацювати добре, якщо у вас є TON слабо структурованих даних, які потрібно проаналізувати, і ви хочете бути в сценарії, коли ви можете просто додати ще 10 машин для обробки даних.
Наприклад, я почав намагатися проаналізувати продуктивність, яка по суті була всім числом часових функцій різних функцій, зафіксованих на 20 машинах. Спробувавши вклеїти все в RDBMS, я зрозумів, що мені дійсно не потрібно запитувати дані ще раз, коли я їх агрегував. І це корисно лише мені в агрегованому форматі. Отже, я зберігаю файли журналів навколо, стискаються, а потім залишаю зведені дані в БД.
Зауважте, я більше звик думати з "великими" розмірами.
Спробуйте Prevayler: http://www.prevayler.org/wiki/ Prevayler - це альтернатива RDBMS. На сайті є додаткова інформація.
Якщо вам не потрібна кислотна кислота , вам, ймовірно, не потрібні накладні витрати RDBMS. Отже, визначте, чи вам це потрібно спочатку. Більшість відповідей, що не надаються тут, не містять кислоти.
Спеціальний двигун зберігання даних (написаний від руки) / Потенційно дуже висока продуктивність у необхідних випадках використання
Якщо у вас є величезний набір даних, замість того, щоб розгорнути свій власний, ви можете використовувати HDF, ієрархічний формат даних.
http://en.wikipedia.org/wiki/Hierarchical_Data_Format :
HDF підтримує декілька різних моделей даних, включаючи багатовимірні масиви, растрові зображення та таблиці.
Це також ієрархічно, як файлова система, але дані зберігаються в одному чарівному двійковому файлі.
HDF5 - це набір, який дозволяє керувати надзвичайно великими і складними наборами даних.
Подумайте, петабайт даних дистанційного зондування NASA / JPL.
День,
Я можу придумати один випадок, коли дані, які ви моделюєте, неможливо легко представити у реляційній базі даних.
Один із таких прикладів - це база даних, яка використовується операторами мобільних телефонів для моніторингу та управління базовими станціями для мобільних телефонних мереж.
Я майже у всіх цих випадках використовує БД OO , або комерційний продукт, або самокатану систему, яка дозволяє ієрархії об'єктів.
Я працював над програмою моніторингу 3G для великої компанії, яка залишиться безіменною, але логотип якої - червона пляма вина (-:, і вони використовували такий БД OO, щоб відслідковувати всі різні атрибути для окремих клітин у межах мережа.
Допит таких БД проводиться за допомогою фірмових методів, які, як правило, повністю вільні від SQL.
HTH.
ура,
Роб
Об'єктні бази даних не є реляційними базами даних. Вони можуть бути дуже зручними, якщо ви просто хочете вставити деякі бази в базу даних. Вони також підтримують версію та модифікацію класів для об'єктів, які вже існують у базі даних. db4o - це перше, що спадає на думку.
У деяких випадках (наприклад, дані фінансового ринку та управління процесами), можливо, вам доведеться використовувати базу даних у реальному часі, а не RDBMS. Дивіться посилання wiki
Кілька років тому був написаний інструмент RAD під назвою JADE, який має вбудовану систему OODBMS. Раніші втілення двигуна БД також підтримували Digitalk Smalltalk. Якщо ви хочете взяти зразок побудови додатків за допомогою парадигми, що не є RDBMS, це може бути початком.
Інші продукти OODBMS включають об’єктивність , GemStone (Вам потрібно отримати VisualWorks Smalltalk, щоб запустити версію Smalltalk, але також є версія Java). У цьому просторі також було декілька дослідницьких проектів з відкритим кодом - EXODUS та його нащадок SHORE.
На жаль, здавалося, що ця концепція померла смертю, ймовірно, через відсутність чітко видимого стандарту та відносно погану можливість спеціального запиту щодо систем RDMBS на базі SQL.
OODBMS найбільш підходить для програм із основними структурами даних, які найкраще представлені у вигляді графіка взаємопов'язаних вузлів. Раніше я говорив, що найвірогідніший додаток OODBMS був багатокористувацькою підземеллям (MUD), де в приміщеннях містилися аватари гравців та інші об’єкти.
Можна пройти довгий шлях, лише використовуючи файли, що зберігаються у файловій системі. RDBMS стають кращими в роботі з краплями, але це може бути природним способом обробки даних про зображення тощо, особливо якщо запити прості (перерахування та вибір окремих елементів.)
Інші речі, які не дуже добре вписуються в RDBMS, - це ієрархічні структури даних, і я здогадуюсь, що геопросторові дані та 3D-моделі не так просто працювати з будь-якими.
Такі сервіси, як Amazon S3, пропонують простіші моделі зберігання (ключ-> значення), які не підтримують SQL. Ключова здатність тут є масштабністю.
Файли Excel також можуть бути корисними, особливо якщо користувачі повинні мати можливість маніпулювати даними у звичному середовищі та створювати повний додаток, що робити це неможливо.
Існує велика кількість способів зберігання даних - навіть "реляційна база даних" охоплює низку альтернатив із простої бібліотеки коду, яка маніпулює локальним файлом (або файлами) так, ніби це реляційна база даних на одному користувачеві, через файлові системи, ніж можуть обробляти декількох користувачів, до великого вибору серйозних "серверних" систем.
Ми багато використовуємо XML-файли - ви отримуєте добре структуровані дані, приємні інструменти для запиту тих же самих можливостей редагувати, якщо це доречно, те, що читається людьми, і вам не доведеться потім турбуватися про роботу двигуна db (або про роботу db двигун). Це добре працює для речей, які по суті є лише для читання (у нашому випадку частіше, ніж не генеруються з db в іншому місці), а також для одиночних користувальницьких систем, де ви можете просто завантажити дані та зберегти їх, як потрібно - але ви створюєте можливості для проблем, якщо потрібно багатокористувацьке редагування - принаймні одного файлу.
Для нас це стосується цього - ми або будемо використовувати щось, що буде робити SQL (MS пропонують набір інструментів, що працюють від .DLL, щоб виконати одиночні користувачі на всьому шляху до корпоративного сервера, і всі вони говорять один і той же SQL (з обмеженнями в нижньому кінці)) або ми збираємось використовувати XML як формат, оскільки (для нас) багатослівність рідко є проблемою.
Наразі нам не доводиться маніпулювати бінарними даними в наших додатках, щоб цього питання не виникало.
Мерф
Можна подумати про використання сервера LDAP замість традиційної бази даних SQL, якщо дані програми сильно орієнтовані на ключ / значення та ієрархічний характер.
Файли BTree часто набагато швидше, ніж реляційні бази даних. SQLite містить у собі бібліотеку BTree, яка знаходиться у відкритому доступі (як і справді «публічний домен», не використовуючи термін «вільно»).
Відверто кажучи, якщо мені потрібна багатокористувацька система, мені потрібно було б багато переконань не використовувати гідну реляційну базу даних сервера.
Повнотекстові бази даних, які можна запитувати за допомогою операторів наближення, таких як "в межах 10 слів" тощо.
Реляційні бази даних - це ідеальний інструмент бізнесу для багатьох цілей - достатньо простий для розуміння та проектування, досить швидкий, адекватний, навіть коли вони не розроблені та оптимізовані генієм, який міг би "використовувати всю потужність" тощо.
Але деякі бізнес-цілі потребують повнотекстової індексації, яка реляційні двигуни або не надає, ні застосовується як думка. Зокрема, у юридичній та медичній сферах є велика кількість неструктурованого тексту для зберігання та проходження.
Теорема CAP пояснює це лаконічно. В основному SQL забезпечує "Сильну послідовність: усі клієнти бачать однаковий вигляд навіть за наявності оновлень".
Я б запропонував RDBMS :) Якщо у вас немає проблем з налаштуванням / адмініструванням, перейдіть на SQLite. Вбудований в RDBMS з повною підтримкою SQL. Це навіть дозволяє зберігати будь-який тип даних у будь-якому стовпчику.
Основна перевага, наприклад, файл журналу: Якщо у вас є величезний, як ви збираєтеся шукати в ньому? За допомогою двигуна SQL ви просто створюєте індекс і різко прискорюєте роботу.
Про повний пошук тексту: SQLite також має модулі для повнотекстового пошуку.
Просто насолоджуйтесь приємним стандартним інтерфейсом до ваших даних :)
Однією з вагомих причин не використовувати реляційну базу даних буде, коли у вас є масивний набір даних і ви хочете масово паралельно та розподілено обробляти дані. Веб-індекс Google був би прекрасним прикладом такого випадку.
Hadoop також має реалізацію файлової системи Google під назвою Розподілена файлова система Hadoop .
Я настійно рекомендую Lua як альтернативу сховища даних типу SQLite.
Тому що:
Це варіант "колекції рідної мови" прийнятої відповіді. Якщо ви використовуєте C / C ++ як рівень програми, цілком доцільно запустити двигун Lua (100 кб двійкового) лише для того, щоб прочитати конфігурації / дані або записати їх.