SQLite / Firebird встроен для числовых данных - PullRequest
2 голосов
/ 18 сентября 2008

У меня есть эксперимент с потоковой передачей 1 Мбит / с числовых данных, которые необходимо сохранить для дальнейшей обработки. Кажется, что записать напрямую в базу данных так же легко, как и в файл CSV, и тогда у меня будет возможность легко получать подмножества или диапазоны.

У меня есть опыт работы с sqlite2 (когда в нем были только текстовые поля), и он выглядел почти так же быстро, как доступ к сырому диску. Какие-либо мнения о лучших текущих СУБД в процессе для этого приложения?

Извините - следовало бы добавить, что это C ++ изначально для Windows, но кроссплатформенность хороша. В идеале двоичный формат файла БД должен быть кроссплатформенным.

Ответы [ 5 ]

3 голосов
/ 19 сентября 2008

Если вам нужно только читать / записывать данные, без каких-либо проверок или манипуляций, выполняемых в базе данных, то оба должны делать это нормально. Файл базы данных Firebird может быть скопирован при условии, что система имеет один и тот же порядок байтов (т.е. вы не можете копировать файл между системами с процессорами Intel и PPC, но с Intel-Intel все в порядке).

Однако, если вам нужно что-то делать с данными, которые выходят за рамки простого чтения / записи, тогда используйте Firebird, поскольку это полноценный сервер SQL со всеми функциями «предприятия», такими как триггеры, представления, хранимые процедуры, временные таблицы и т. д.

Кстати, если вы решите попробовать Firebird, я настоятельно рекомендую вам использовать библиотеку IBPP для доступа к ней. Это очень тонкая оболочка C ++ для C API Firebird. У меня есть около 10 классов, которые инкапсулируют все, и его очень легко использовать.

2 голосов
/ 18 сентября 2008

Если все, что вы хотите сделать, это сохранить числа и иметь возможность легко ранжировать запросы, вы можете просто взять любую стандартную древовидную структуру данных, имеющуюся в STL, и сериализовать ее на диск. Это может укусить вас в кроссплатформенной среде, особенно если вы пытаетесь перейти кросс-архитектуры.

Что касается более гибких / удобных для людей решений, sqlite3 широко используется, надежен, стабилен, очень хорош во всем.

BerkeleyDB имеет ряд полезных функций, для которых можно было бы его использовать, но ни одна из них не применима в этом сценарии, imho.

Я бы сказал, перейдите с sqlite3, если вы можете принять лицензионное соглашение.

0 голосов
/ 08 июня 2011

Вы также можете рассмотреть формат файла числовых данных, который специально предназначен для хранения этих типов больших наборов данных. Например:

  • HDF - самый распространенный и хорошо поддерживаемый во многих языках бесплатный набор библиотек. Я настоятельно рекомендую это.
  • CDF - аналогичный формат, используемый НАСА (но используемый любым).
  • NetCDF - еще один аналогичный формат (последняя версия на самом деле является урезанным HDF5).

Эта ссылка содержит некоторую информацию о различиях между вышеуказанными типами наборов данных: http://nssdc.gsfc.nasa.gov/cdf/html/FAQ.html

0 голосов
/ 29 июля 2009

Я подозреваю, что ни одна из баз данных не позволит вам записывать данные с такой высокой скоростью. Вы можете проверить это сами, чтобы быть уверенным. По моему опыту - SQLite не удалось вставить более 1000 строк в секунду для очень простой таблицы с одним целочисленным первичным ключом.

В случае проблем с производительностью - я использую формат CSV для записи файлов, а позже я загружаю их данные в базу данных (SQLite или Firebird) для дальнейшей обработки.

0 голосов
/ 18 сентября 2008

Зависит от того, какой язык вы используете. Если это C / C ++, TCL или PHP, SQLite остается одним из лучших в сценарии с одним автором. Если вам не нужен доступ SQL, библиотека в стиле Беркли в DB-стиле может быть немного быстрее, например, Sleepycat или gdbm. С несколькими авторами вы могли бы рассмотреть отдельное клиент-серверное решение, но это не похоже на то, что вам нужно. Если вы используете Java, решения hdqldb или derby (поставляются с JVM от Sun под маркой «JavaDB») кажутся предпочтительными.

...