columnFamily を作成します。そして、次のように保存します
rowKey = foo
columnName Value
-----------------------------------
1 {:some => :data,..}
2 {:some => :data,..}
...
...
99 {:some => :data,..}
seen {1 => 1347682901, 2 => 1347682801}
1、2、...「見た」はすべて動的です。
これらの列の 1 つだけを更新することに不安がある場合。列ファミリーに新しい列を挿入する方法と同じです。Cassandraアップデートコラムはこちら
$column_family->insert('foo', array('42' => '{:some => :newdata,..}'));
まだTTLを使用する必要はありません。しかし、それはそれと同じくらい簡単です。ここでこれを達成するための非常に簡単な方法を参照してくださいCassandra 0.7+の期限切れの列
アップデート
Q1. 私の理解のために:99列を作成することをお勧めしますか? それとも、そのダイナミックさを維持することは可能ですか?
列ファミリーは、RDBMS とは異なり、柔軟な構造を持っています。動的に作成された行キーの列の数に制限はありません。例えば:
myCcolumnFamily{
"rowKey1": {
"attr1": "some_values",
"attr2": "other_value",
"seen" : 823648223
},
"rowKey2": {
"attr1": "some_values",
"attr3": "other_value1",
"attr5": "other_value2",
"attr7": "other_value3",
"attr9": "other_value4",
"seen" : 823648223
},
"rowKey3": {
"name" : "naishe",
"log" : "s3://bucket42.aws.com/naishe/logs",
"status" : "UNKNOWN",
"place" : "Varanasi"
}
}
これは読む価値のある古い記事です: WTF は SuperColumn ですか? これはあなたの質問に答える典型的な引用です(私のものを強調してください):
私が指摘したいことの 1 つは、この[ColumnFamily]
レベルで適用されるスキーマがないことです。行には、含まれる列の定義済みリストがありません。上記の例では、キー「ieure」を持つ行には「age」と「gender」という名前の列があり、キー「phatduckk」で識別される行にはありません。100% 柔軟です。1 つの行には 1,989 の列があり、もう 1 つの行には 2 つの列があります。1 つの行には「foo」という列があり、残りはありません。これは、Cassandra のスキーマレスな側面です。
. . . .
Q2. そして、サブ構造をシリアル化することをお勧めしますか?
それはあなた次第です。シリアル化したくない場合は、おそらく SuperColumn を使用する必要があります。私の経験則はこれです。列の値が、部分に個別にアクセスできない単位を表す場合は、Column を使用します。(つまり、値をシリアル化することを意味します)。列に断片化されたサブパーツがあり、直接アクセスする必要がある場合は、SuperColumn を使用します。