Используя базу данных таблиц (TDB), вы можете просто сохранить список ключей в одном значении в качестве токенов. Пока ваши ключи являются действительными "токенами", вы можете легко перечислить их таким образом в одном поле.
Вот пример использования низкоуровневого интерфейса Pyrant :
>>> from pyrant import Tyrant
>>> t = Tyrant()
>>> includes = 5 # code for operation TDBQCSTROR
>>> t['test'] = {'foo': 'abc,def', 'bar': 'abc def', 'quux': 'abcdef'}
>>> t.proto.search([('foo',includes,'abc')])
[u'test']
>>> t.proto.search([('bar',includes,'abc')])
[u'test']
>>> t.proto.search([('quux',includes,'abc')])
[]
>>> t.proto.search([('quux',includes,'abcd')])
[]
>>> t.proto.search([('quux',includes,'abcdef')])
[u'test']
TDBQCSTROR - это тип операции, который обозначает «строка содержит хотя бы один токен в ...» (см. «Tctdbqryaddcond» в Спецификации API Tokyo Cabinet ).
Обратите внимание, что и "abc, def", и "abc def" соответствуют ключевому слову "abc", но "abcdef" - нет, хотя "abc" на самом деле является подмножеством "abcdef". Это можно использовать для поиска ключей, хранящихся в одной строке, например ::
t['tokyocabinet'] = {'title': 'Tokyo Cabinet'}
t['primary-key'] = {'title': 'Primary Key'}
t['question1228313'] = {
'title': 'how to build one to many rows in tokyo cabinet?',
'tags': 'tokyocabinet, primary-key',
}
(теги, вероятно, не лучший пример, поскольку они не должны быть ссылками.)
Если вы используете базу данных TC другого типа (не TDB), я не могу представить правильное решение. Вы можете задать этот вопрос в соответствующей дискуссионной группе .