Предложения для базы данных с хорошей поддержкой операций над множествами - PullRequest
2 голосов
/ 01 октября 2010

Я ищу базу данных с хорошей поддержкой операций над множествами (более конкретно: союзы).

То, что я хочу, это то, что может хранить наборы коротких строк и вычислять объединение таких наборов. Например, я хочу добавить 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, которая имеет хорошую поддержку для этого варианта использования?

1 Ответ

1 голос
/ 01 октября 2010

звучит так, как будто вам нужно что-то вроде boost::disjoint_set, представляющее собой структуру данных, специально оптимизированную для объединения или пересечения больших множеств.

...