C # Проектное решение для доступа к временным рядам с базой данных - PullRequest
1 голос
/ 12 октября 2011

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

Одна точка данных состоит, например, из времени, высоты, ширины и т. Д. Для каждого «тика». Является ли хорошей идеей сохранить n точек данных в памяти с помощью класса коллекции, а затем «сбросить» точки в базу данных после достижения пределов коллекции?

Или точки данных должны быть непосредственно записаны в базу данных, чтобы мой объект мог выполнять запросы к нему?

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

Предположим, что обрабатывается не более 500 точек данных в секунду, и данные должны быть каким-то образом рассчитаны для каждой входящей точки. С чистым решением для базы данных необходимо выполнить запрос хранилища для каждой входящей точки. Я думаю, это неэффективно, но я не знаю, может ли такая база данных «слушать» и делать это быстро.

Хорошей функцией для базы данных будет отправка баллов подписчикам. Возможно ли это с сервером SQL?

Спасибо, Юрген

Ответы [ 3 ]

2 голосов
/ 12 октября 2011

Оставляя в стороне требование «рассылки подписчикам», не попадайтесь в ловушку преждевременной оптимизации.

Сначала я бы попробовал самое простое решение, которое, вероятно, просто записывает данные в базу данных, так какприбывает.Затем запустите стресс-тесты.Если производительность не на пустом месте, найдите узкие места и оптимизируйте их.

Обращаясь к требованию «рассылки подписчикам», на самом деле это не то, для чего обычно предназначены платформы реляционных баз данных (онибольше о хранении данных и предоставлении их для извлечения по требованию).Требование типа pub-sub обычно лучше всего решить с использованием некоторой шины сообщений.Возможно, взгляните на что-то вроде NServiceBus .

1 голос
/ 12 октября 2011

Я бы сказал, что больший вопрос в том, как вы планируете хранить это в SQL.Я бы поставил точки данных в памяти на некоторое время (1 секунду?), А затем записал бы одну строку в базу данных с полем BLOB-объекта или полем nvarchar, содержащим все данные за эту секунду, поскольку это будет означать, что база данных будет масштабироваться дальшестрока может содержать некоторую сводную информацию о том, что произошло в эту секунду, которую вы можете использовать при выполнении запросов к данным, чтобы уменьшить нагрузку при выполнении выбора ... Конечно, это не будет осуществимо, если вы хотите выполнитьпрямые запросы на эти данные.

Все зависит от того, что вы планируете делать с данными ...

1 голос
/ 12 октября 2011

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

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

время от времени сохраняется в дБ.

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