Встроенный SQLite / Firebird для обработки числовых данных

StackOverflow https://stackoverflow.com/questions/95087

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

-D

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top