Какой самый простой способ имитировать таблицу базы данных с индексом в хранилище значений ключа?
Вопрос
Какой самый простой способ имитировать таблицу базы данных с индексом в хранилище значений ключа?В хранилище значений ключей НЕТ ранжированных запросов и упорядоченных ключей.
То, что я хочу смоделировать (в порядке приоритета):
- Создание таблиц
- Добавление столбцов
- Создание индексов
- Запрос, основанный на первичном ключе
- Запрос, основанный на произвольных столбцах
Решение
Если вы используете Редис (расширенное хранилище ключей-значений, поддерживающее строки, списки, наборы и т.д.) Тогда это довольно просто.Я уже разработал Клиент C # redis который имеет встроенную поддержку для хранения моделей данных POCO.Эти точно такие же POCO могут быть использованы Ормлит чтобы сохранить его в RDBMS.
Кстати, Redis работает быстро, у меня есть эталонный показатель который сохраняет и извлекает всю базу данных Northwind (3202 записи) менее чем за 1,2 секунды (выполняется внутри UnitTest на 3-летнем iMac).
Я храню объекты двумя способами
- Различные сущности, где я объединяю имя типа класса и первичный ключ для создания уникального ключа, например
urn:user:1
- Затем я поддерживаю отдельный набор первичных ключей (в наборе Redis), чтобы отслеживать все мои объекты, используя ключ, подобный:
ids:user
- Затем я поддерживаю отдельный набор первичных ключей (в наборе Redis), чтобы отслеживать все мои объекты, используя ключ, подобный:
- В списке на стороне сервера Redis, который действует очень похоже на таблицу с поддержкой подкачки, используя ключ, подобный:
lists:user
Другие советы
Используйте хэш-таблицу или словарь.Если вам нужны уникальные значения ключа, вы могли бы использовать GUID или хэш-код.
Хранилище ключ-значение должно поддерживать упорядочение ключей и ранжированный доступ к ключам.
Затем вам следует создать два словаря:
id -> payload
и
col1, id -> NULL
, где payload
должен содержать все данные, которые могла бы содержать таблица базы данных, а ключи второго словаря должны содержать значения (col1, id)
из каждой статьи первого словаря.