2009-08-04 9 views
2

...ハッシュテーブルのデータベースについてはtokyoキャビネットに1行から複数​​行を作成する方法は?私は東京のキャビネットのドキュメントから引用

は、各キーは がそう、キーが重複する複数のレコードを格納することは不可能である、データベース内で一意である必要があります。

またはtokyocabinetではタプルベースのキーを使用できますか? (クローラ1キロワット<のような - >多くのdocids)1対多の店舗を設定するための最良の方法だろう何

テーブルデータベース(TDB)を使用して

〜B

答えて

1

を、あなたはキーのリストをトークンとして1つの値に格納するだけです。あなたのキーが有効な "トークン"である限り、あなたはこの方法で単一のフィールドに簡単にリストすることができます。

はここ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の略操作タイプである 『文字列が中に少なくとも1つのトークンが含まれています...』(Tokyo Cabinet API specsで 『tctdbqryaddcond』を参照してください。 )。

"abc"が実際に "abcdef"のサブセットであるにもかかわらず、 "abc、def"と "abc def"の両方が "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ではない)、私は有効な解決策を想像することはできません。あなたは関連するdiscussion groupでこの質問をしたいかもしれません。

0

ハッシュテーブルのデータベースでは、各キーはデータベース内で一意でなければならないため、キーが重複する2つ以上のレコードを保存することはできません。

TokyoCabinet::BDB.putdup(key, value) -> true|false 
TokyoCabinet::BDB.getlist(key) => [value, ...]|nil 
:RubyのAPIを使用して

bool tcbdbputdup(TCBDB *bdb, const void *kbuf, int ksiz, const void *vbuf, int vsiz); 

B + -Tree東京内閣データベースは、重複キーを許可します

関連する問題