Реализуете запрос поверх хранилища ключей и значений? - PullRequest
1 голос
/ 18 июня 2020

Я использую хранилище данных типа "ключ-значение" с базовой функциональностью

put(String bucketName, String, byte[] value);
byte[] get(String bucketName, String key);
List<String> getKeys(String bucketName, String prefix, int maxKeys);
delete(String bucketName, String key); 

И в качестве аргумента предположим, что эти вызовы API напрямую связаны с хранилищем объектов, которое может хранить миллионы значений, быстро получить значение с помощью ключей, получить ключи (только по префиксу, без суффикса, без возможности регулярного выражения) и удалить значение с помощью ключа. Все это можно сделать эффективно и очень оптимально, чего он не может сделать, так это поиск по значению или поиск по суффиксу ключа, регулярному выражению или любому другому запросу в этом отношении. Также нет транзакций, то есть мы не можем выполнять пакетные операции типа «все или не все», каждая операция выполняется сама по себе. Кроме того, у меня нет возможности изменить поведение сервера, наша библиотека может взаимодействовать с ним только через этот API, выполняя такие операции, а также создавать коллекции / корзины. Вот и все.

Мой вопрос заключается в хранилище данных типа «ключ-значение», как бы вы реализовали функциональность запроса поверх операций этого ограниченного хранилища данных ? Насколько я понимаю, например, Google BigTable также является хранилищем ключей и значений и не может также искать / запрашивать ключи и значения внутри ключей, поэтому как можно использовать такое хранилище данных с запросами , особенно что он используется в качестве основного хранилища данных Google App Engine? Какая здесь ключевая концепция?

Что можно наложить поверх этого API, чтобы можно было делать запросы?

Моя первоначальная идея мне нужно создать «индексную» коллекцию / корзину для достижения этой цели, но я хотел бы знать от экспертов по хранилищам данных.

...