如何在cassandra中保存对象数组?
我正在使用nodejs应用程序并使用cassandra驱动程序连接到cassandra数据库。我想在数据库中保存如下记录:
{
"id" : "5f1811029c82a61da4a44c05",
"logs" : [
{
"conversationId" : "e9b55229-f20c-4453-9c18-a1f4442eb667",
"source" : "source1",
"destination" : "destination1",
"url" : "https://asdasdas.com",
"data" : "data1"
},
{
"conversationId" : "e9b55229-f20c-4453-9c18-a1f4442eb667",
"source" : "source2",
"destination" : "destination2",
"url" : "https://afdvfbwadvsffd.com",
"data" : "data2"
}
],
"conversationId" : "e9b55229-f20c-4453-9c18-a1f4442eb667"
}
在上面的记录中,我可以使用类型“text”保存列“id”和“conversationid”的值。但不确定如何定义模式并为字段“logs”保存数据。
2条答案
按热度按时间xpcnnkqh1#
根据您希望如何查询此数据,您有几个选项。
第一种方法是在logs字段中对json进行字符串化,并将其保存到数据库中,然后在查询数据后将其转换回json。
第二个选项与第一个选项类似,但不是对数组进行字符串化,而是将数据作为列表存储在数据库中。
第三个选项是为日志定义一个新表,其中包含会话的主键和日志中每个元素的集群键。这将允许您按完整键或仅按主键进行查询,并检索与这些条件匹配的所有行。
njthzxwz2#
使用cassandra,您将希望以与查询数据相同的方式存储数据。正如你提到的
conversatonid
,这将影响PRIMARY KEY
定义应该是。鉴于此,conversationid
,应该是一个好的分区键。至于聚类列,我不得不猜测基数。所以,sourceid
看起来它可以用来唯一地标识会话中的日志条目,所以我接下来使用它。我想用
id
作为最后的聚类列,但它看起来像所有具有相同conversationid
也会有同样的结果id
. 最好为每个条目指定其自己的唯一标识符,以帮助确保唯一性:这使得最终的表定义如下所示: