Как эффективно хранить большое количество строк в базе данных - PullRequest
6 голосов
/ 03 марта 2011

Как лучше всего хранить большое количество данных в базе данных? Мне нужно хранить значения различных датчиков окружающей среды с отметками времени. Я сделал несколько тестов с SQLCE, он отлично работает для нескольких 100 000 строк, но если он дойдет до миллионов, выбор будет ужасно медленным. Мои фактические таблицы:

Datapoint:[DatastreamID:int, Timestamp:datetime, Value:float]  
Datastream: [ID:int{unique index}, Uint:nvarchar, Tag:nvarchar]

Если я запрашиваю точки данных определенного потока данных и диапазона дат, это занимает много лет. Особенно, если я запускаю его на встроенном устройстве WindowsCE. И это главная проблема. На моей машине для разработки запрос занял ~ 1сек, а на устройстве CE - ~ 5мин

каждые 5 минут. Я регистрирую 20 датчиков, 12 в час * 24 часа * 365 дней = 105 120 * 20 датчиков = 2 102 400 (строк) в год

Но это может быть еще больше датчиков!

Я думал о каком-то бэкенде веб-сервиса, но устройство не всегда может иметь соединение с интернетом / сервером.

Данные должны отображаться на самом устройстве.

Как я могу ускорить вещи? выбрать другой макет таблицы, использовать другую базу данных (sqlite)? На данный момент я использую .netcf20 и SQLCE3.5

Несколько советов?

Ответы [ 4 ]

2 голосов
/ 03 марта 2011

Я уверен, что любая реляционная база данных будет соответствовать вашим потребностям.SQL Server, Oracle и т. Д. Важно создать хорошие индексы, чтобы ваши запросы были эффективными.Если вам нужно выполнить сканирование таблицы только для того, чтобы найти одну запись, она будет медленной независимо от того, какую базу данных вы используете.

Если вы всегда запрашиваете конкретные значения DataStreamID и Timestamp, создайте индекс дляЭто.Таким образом он будет выполнять поиск по индексу вместо сканирования.

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

Можно ли использовать вместо этого SQL Server Express Edition?Вы можете создавать индексы на него, как в полной версии.Я работал с базами данных, которые более 100 миллионов строк в SQL Server просто отлично.SQL Server Express Edition ограничивает размер вашей базы данных до 10 ГБ, поэтому, пока все в порядке, бесплатная программа должна работать на вас.

http://www.microsoft.com/express/Database/

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

Ваш дизайн должен иметь эти: Первичный ключ в таблице.Целочисленный PK быстрее.

Вам нужно проанализировать ваши выбранные запросы, чтобы увидеть, что происходит за кулисами.Select должен выполнить SEEK вместо сканирования

Если 100K замедляет работу, вы должны смотреть на запрос через анализатор.

Это может быть немного медленным, если у вас 100M строк, а не 100K строк

Надеюсь, это поможет

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

Ключом к быстрому доступу является использование одного или нескольких индексов.

База данных из двух миллионов строк в год очень управляема.

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

У вас есть доступ к SQL Server или даже к MySQL?

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