创建一个列族。并存储如下
rowKey = foo
columnName Value
-----------------------------------
1 {:some => :data,..}
2 {:some => :data,..}
...
...
99 {:some => :data,..}
seen {1 => 1347682901, 2 => 1347682801}
1,2,...“看到”都是动态的。
如果您担心只更新其中一列。这与在列族中插入新列的方式相同。见这里Cassandra 更新专栏
$column_family->insert('foo', array('42' => '{:some => :newdata,..}'));
我还没有使用TTL。但这很简单。在 Cassandra 0.7+ 中的 Expiring Columns 中查看非常简单的方法来实现这一点
更新
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 is a SuperColumn?这是一个典型的报价,可以回答您的查询(强调我的):
我想指出的一件事是在这个[ColumnFamily]
级别上没有强制执行模式。行没有它们包含的预定义列列表。在上面的示例中,您会看到键为“ieure”的行包含名称为“age”和“gender”的列,而键“phatduckk”标识的行没有。它是 100% 灵活的:一个行可能有 1,989 个列,而另一个有 2 个。一个行可能有一个名为“foo”的列,而其他行都没有。这是 Cassandra 的无模式方面。
. . . .
Q2。你建议序列化子结构?
由你决定。如果您不想序列化,您可能应该使用 SuperColumn。我的经验法则是这样的。如果列中的值表示不能独立访问其部分的单元,请使用列。(这意味着序列化值)。如果列具有可能需要直接访问的零散子部分,请使用 SuperColumn。