как управлять миллионами / миллиардами небольших значений в «базе данных» - PullRequest
0 голосов
/ 23 марта 2011

У меня есть приложение, которое будет генерировать миллионы записей даты / типа / значения. нам не нужно делать сложные запросы, только, например, получить среднее значение за день типа X между датами A и B.

Я уверен, что обычный db, такой как mysql, не лучший способ справиться с подобными вещами, есть ли лучшая система, которая любит такие данные.

РЕДАКТИРОВАТЬ : цель не в том, чтобы сказать, что реляционная база данных не может решить мою проблему, а узнать, есть ли другой тип базы данных, такой как база данных ключ / значение, nosql, ориентированная на документы,. .. может быть более приспособлен к тому, что я хочу сделать.

Ответы [ 4 ]

1 голос
/ 23 марта 2011

Если вы имеете дело с простой таблицей как таковой:

CREATE TABLE myTable (
    [DATE] datetime,
    [TYPE] varchar(255),
    [VALUE] varchar(255)
)

Создание индекса, вероятно, для TYPE,DATE,VALUE - в таком порядке - даст вам хорошую производительность по описанному вами запросу.Используйте план объяснения или любой другой эквивалент в базе данных, с которой вы работаете, для проверки показателей производительности.И настройте запланированное задание для регулярной дефрагментации этого индекса - частота будет зависеть от того, как часто происходит вставка, удаление и обновление.

Что касается альтернативного хранилища (например, NoSQL), вы ничего не получите.NoSQL светит, когда вам нужно хранилище без схемы.Другими словами, вы не знаете определения сущности с течением времени.Но из того, что вы описали, у вас есть очень четкое представление о том, что вы хотите сохранить, что хорошо подходит для реляционной базы данных.

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

1 голос
/ 23 марта 2011

MS SQL Server и Oracle предлагают концепцию Секционированных таблиц и индексов .

Короче говоря: вы можете сгруппировать строки по некоторому значению, то есть по году и месяцу.Каждая группа может быть доступна как отдельная таблица с собственным индексом.Таким образом, вы можете перечислять, суммировать и редактировать продажи за февраль 2011 года без доступа ко всем строкам.Секционированные таблицы усложняют базу данных, но в случае очень длинных таблиц это может привести к значительно лучшей производительности.

0 голосов
/ 29 марта 2011

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

0 голосов
/ 23 марта 2011

Исходя из стоимости, вы можете выбрать либо MySQL, либо SQL Server, в этом случае вам должно быть понятно, что вы хотите достичь с базой данных только для хранения, тогда любая СУБД может справиться.

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