Кэширование огромных данных на диск - PullRequest
0 голосов
/ 21 апреля 2011

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

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

Ответы [ 3 ]

1 голос
/ 22 апреля 2011

Вы заботитесь о согласованности данных?при сбоях питания?

Файлы с отображением в памяти вместе с случайными сбросами, по-видимому, вы хотите получить

Вам нужен индексированный доступ к данным?

Возможно, вам нужно спроектировать реализацию B-дерева или реализацию B + дерева.что обеспечивает эффективное извлечение индексированных данных и лучшую блокировку на уровне блоков.

http://code.google.com/p/high-concurrency-btree/

1 голос
/ 21 апреля 2011

В SQL Server есть нечто, называемое таблицами XML.Эти таблицы основаны на физических файлах XML, расположенных на диске.Вы можете сопоставить / связать данные XML на диске с таблицей в SQL Server.Для пользователей это легко, иными словами, они видят эти таблицы как обычные таблицы.

Помимо технической / философской дискуссии о кэшировании больших данных на диске, это всего лишь идея ...

0 голосов
/ 10 апреля 2012

Как альтернативный ответ, моя собственная реализация B + Tree будет аккуратно рассматривать это как реализацию полностью управляемого кода (C #) IDictionary . Это однофайловое хранилище ключей / значений, которое поточно-ориентировано и оптимизировано для параллелизма. Он был создан с нуля специально для этой цели и для обеспечения сквозного кэша.

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