Как проще всего смоделировать таблицу базы данных с индексом в хранилище значений ключей? - PullRequest
7 голосов
/ 16 февраля 2010

Какой самый простой способ симулировать таблицу базы данных с индексом в хранилище значений ключей? Хранилище значений ключей НЕ имеет ранжированных запросов и НЕТ упорядоченных ключей.

Вещи, которые я хочу смоделировать (в порядке приоритета):

  1. Создание таблиц
  2. Добавить столбцы
  3. Создание индексов
  4. Запрос на основе первичного ключа
  5. Запрос на основе произвольных столбцов

Ответы [ 3 ]

4 голосов
/ 16 февраля 2010

Если вы используете Redis (расширенное хранилище значений ключей, которое поддерживает строки, списки, наборы и т. Д.), То это довольно просто. Я уже разработал C # redis клиент , который имеет встроенную поддержку для хранения моделей данных POCO. Эти те же самые POCO могут использоваться OrmLite для хранения их в РСУБД.

Кстати, Redis работает быстро, у меня есть тест , который хранит и извлекает всю базу данных Northwind (3202 записи) менее чем за 1,2 секунды (работает внутри UnitTest на 3-летнем iMac) .

Я храню сущности двумя способами

  • Отдельные сущности, где я объединяю имя типа Class и Первичный ключ для создания уникального ключа, например urn:user:1
    • Затем я поддерживаю отдельный набор первичных ключей (в наборе Redis) для отслеживания всех моих сущностей, используя такой ключ, как: ids:user
  • В списке на стороне сервера Redis - который очень похож на таблицу с поддержкой подкачки страниц с использованием ключа вроде: lists:user
2 голосов
/ 16 февраля 2010

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

1 голос
/ 16 февраля 2010

Хранилище значений ключей должно поддерживать порядок ключей и дальний доступ к ключам.

Тогда вам нужно создать два словаря:

id -> payload

и

col1, id -> NULL

, где payload должен содержать все данные таблицы базы данных, а ключи второго словаря должны содержать значения (col1, id) для каждой записи первого словаря.

...