Мнения о моей проблеме с хранением данных (база данных / домашнее решение) - PullRequest
0 голосов
/ 11 февраля 2011

У меня очень просто структурированные данные, которые в настоящее время хранятся в формате файла домашнего приготовления, но мне интересно, следует ли нам перейти на что-то более современное. Данные - это просто таблица double s, проиндексированная столбцом double. Вот что мне нужно сделать:

  • Итерация по таблице.
  • Вставка и удаление произвольных записей.
  • Выбор заданного количества строк до и после заданного значения ключа (где ключ может отсутствовать в базе данных).

Требования:

  • Хранилище должно быть файловым без сервера.
  • Нет необходимости читать весь файл в память.
  • Полученный файл должен быть переносимым между различными архитектурами (относительно endian-ness ...)
  • Должен быть очень стабильным проектом (данные крайне важны).
  • Должен работать на Solaris / SPARC и предпочтительно также на Linux / x64.
  • Время доступа должно быть максимально быстрым.
  • Должен быть доступен в виде библиотеки C ++. Бонусные баллы за привязки Fortran и Python:)
  • Дополнительное представление чисел с более высокой точностью, чем двойная точность, будет бонусом.
  • Относительно компактный размер хранилища также будет бонусом.

Из моего ограниченного опыта, sqlite было бы интересным выбором, или, возможно, mysql в несерверном режиме, если sqlite недостаточно быстр. Но, может быть, полноценная база данных SQL излишня?

Что вы предлагаете?

1 Ответ

1 голос
/ 11 февраля 2011

SQLite отвечает практически всем вашим требованиям, и его не так сложно использовать. Попробуйте!

  • Он основан на файлах, и вся база данных представляет собой один файл.

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

  • Формат кроссплатформенный :

    Базы данных SQLite переносимы между 32-разрядными и 64-разрядными компьютерами, а также между архитектурами с прямым и прямым порядком байтов.

  • Он существует уже давно и используется во многих местах, и обычно считается зрелым и стабильным.

  • Это очень портативный и работает на Solaris / SPARC и Linux / x64.

  • Это на быстрее, чем MySQL (хотя за этой ссылкой присутствуют крупинки соли) или других подобных серверов баз данных, поскольку необходимо учитывать только одного клиента.

  • Существует C ++ API и привязка Python и оболочка Фортрана .

  • Тип столбца произвольной точности отсутствует, но NUMERIC будет автоматически преобразован в текст, если его нельзя точно представить:

    Для преобразований между классами хранения TEXT и REAL SQLite считает преобразование без потерь и обратимым, если сохраняются первые 15 значащих десятичных цифр числа. Если преобразование TEXT в INTEGER или REAL без потерь невозможно, значение сохраняется в классе хранения TEXT.

  • Компактное хранилище базы данных, я не уверен. Но я никогда не слышал, чтобы SQLite был особенно расточительным.

...