Я ищу базу данных с хорошей поддержкой операций над множествами (более конкретно: союзы).
То, что я хочу, это то, что может хранить наборы коротких строк и вычислять объединение таких наборов. Например, я хочу добавить A, B и C к набору, затем D и A к другому, а затем получить количество элементов объединения этих наборов (4), но увеличенное в миллион раз или около того.
Значения представляют собой 12-символьные строки, а заданные размеры варьируются от отдельных элементов до миллионов.
Я экспериментировал с Redis, и это фантастически во всех отношениях, за исключением того, что для объема данных, которые у меня есть, сложно с чем-то, что основано на памяти. Я пытался использовать функцию VM, но это заставляет ее использовать еще больше памяти, это что-то более ориентированное на большие значения, а у меня небольшие значения (так говорят полезные люди из списка рассылки Redis). Жюри все еще отсутствует, но я могу заставить его работать.
Я также сделал набросок по его реализации поверх реляционной базы данных, которая, вероятно, сработает, но то, что я прошу, это то, что мне не придется взламывать, чтобы работать. Redis был бы хорошим ответом, но, как я упоминал выше, я попробовал это.
Моя текущая реализация, основанная на Redis, работает примерно так: я анализирую файлы журнала и для каждой строки извлекаю ключ API, идентификатор пользователя и значения ряда свойств, таких как домен сайта, время день и т. д. Затем я формулирую ключи, которые выглядят примерно так (каждая строка приводит к множеству ключей, по одному для каждого свойства):
APIKEY:20101001:site_domain:stackoverflow.com
ключевые точки к набору, и к этому набору я добавляю идентификатор пользователя. Когда я проанализировал все файлы журнала, я хочу узнать общее количество уникальных идентификаторов пользователя для свойства за все время, и поэтому я спрашиваю Redis о количестве элементов всех ключей, соответствующих
APIKEY:*:site_domain:stackoverflow.com
Есть ли база данных, кроме Redis, которая имеет хорошую поддержку для этого варианта использования?