Подход для кэширования данных из регистратора данных - PullRequest
2 голосов
/ 21 мая 2010

Привет,

Я работал над приложением C # .NET, которое взаимодействует с регистратором данных. Пользователь может запрашивать и получать журналы за указанный период времени, а также просматривать графики данных. Обычно новый журнал данных создается каждую минуту и ​​сохраняет измерения для нескольких параметров. Чтобы получить значимую информацию из регистратора, необходимо собрать разумное количество журналов - данные, по крайней мере, за несколько дней. Аппаратный интерфейс представляет собой модуль UART-USB на устройстве, который ограничивает скорость передачи до 30 журналов в секунду. Это становится довольно медленным при чтении данных, полученных за несколько дней / недель.

То, что я хотел бы сделать, это улучшить воспринимаемую производительность для пользователя. Я понимаю, что с аппаратным ограничением скорости пользователю придется ждать полного цикла загрузки, по крайней мере, при первом получении большего набора данных. Моя цель состоит в том, чтобы кэшировать все данные, видимые приложением, чтобы они могли быть получены быстрее, если когда-либо потребуется снова. Подход, который я рассматривал, заключается в использовании легкой базы данных, такой как SqlServerCe, которая может хранить журналы данных по мере их поступления. Затем я надеюсь сначала выполнить поиск в кеше, прежде чем запрашивать у устройства логи. Кэш будет обновляться любыми журналами, полученными по запросу, которые еще не были кэшированы.

Наконец, мой вопрос - вы считаете это хорошим подходом? Есть ли лучшие альтернативы, которые вы можете придумать? Я пытался найти SO и Google для подкрепления этой идеи, но я в основном сталкиваюсь с обсуждением кэширования веб-запросов / контента.

Спасибо за любые отзывы!

Ответы [ 2 ]

2 голосов
/ 21 мая 2010

Похоже, очень разумный подход. Лично я бы пошел с SQL CE для хранения, убедитесь, что вы индексируете столбец, содержащий дату и время записи, а затем используете TableDirect для индекса для получения и вставки данных, так что это быстро. Поскольку ваши данные уже являются хронологическими, нет необходимости задействовать какой-либо медленный процессор SQL-запросов, просто ищите дату (или конец) и выполняйте откат с помощью SqlCeResultSet. В итоге скорость будет ограничена только вводом / выводом. Я профилировал, делая очень, очень похожие вещи в проекте, и обнаружил, что TableDirect с SQLCE работает так же быстро, как плоский двоичный файл.

1 голос
/ 21 мая 2010

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

Я бы настоятельно рекомендовал SQLite. Существует класс .NET здесь .

...