gpt4 book ai didi

c# - CQL3 每行都有自己的模式

转载 作者:太空狗 更新时间:2023-10-29 18:13:15 25 4
gpt4 key购买 nike

我想在 .Net 应用程序中使用 Cassandra。我的目标是将一些数据存储在列族中,但每一行数据都有不同的架构。

示例(一个非常简单的示例)我想要一个“玩具”列族来存储以下对象,(注意它们除了 ID 属性之外还有其他非常不同的属性)

玩具对象 1{ “编号”:“1”, "名称":"汽车", “number_of_doors”:4, “喜欢”:3}

玩具对象 2{ “编号”:“2”, "type":"平面", “飞行范围”:“100m”

玩具对象 3{ “编号”:“3”, “类别”:“火车”, "number_of_carriages":10}

根据我对 Datastax CSharp 驱动程序的初步理解和使用,我必须始终更改不适合我的表(列族)。我希望每一行都有自己的模式。 Thrift API 可能能够解决这个问题,但 HectorSharp 似乎已经死了。

与我的要求类似但没有我想要的答案的问题

Cassandra for a schemaless db, 10's of millions order tables and millions of queries per day

我是否期望每一行都有自己的架构,或者有没有办法使用 Cassandra+Csharp 来做到这一点?

预先感谢您的回答。

最佳答案

旧版本的 Cassandra 是无架构的,这意味着您在任何地方都无法定义行可以包含的内容。您现在需要的可以通过 Cassandra 2.1 上的 Map部分完成

CREATE TABLE toys (
id text PRIMARY KEY,
toy map<text, text>
)

放一些数据...

INSERT INTO toys (id, toy) VALUES ( '1', {'name':'Car', 'number_of_doors':'4', 'likes':'3'});
INSERT INTO toys (id, toy) VALUES ( '2', {'type':'Plane', 'flying_range':'100m'});
INSERT INTO toys (id, toy) VALUES ( '3', {'category':'Train', 'number_of_carriages':'10'});

表格内容...

 id | toy
----+-------------------------------------------------------
3 | {'category': 'Train', 'number_of_carriages': '10'}
2 | {'flying_range': '100m', 'type': 'Plane'}
1 | {'likes': '3', 'name': 'Car', 'number_of_doors': '4'}

我们现在可以在键上创建索引 ...

CREATE INDEX toy_idx ON toys (KEYS(toy));

...并对映射键执行查询...

SELECT * FROM toys WHERE toy CONTAINS KEY 'name';

id | toy
----+-------------------------------------------------------
1 | {'likes': '3', 'name': 'Car', 'number_of_doors': '4'}

现在您可以像处理普通列一样更新或删除 map 条目,无需先读后写

DELETE toy['name'] FROM toys WHERE id='1';
UPDATE toys set toy = toy + {'name': 'anewcar'} WHERE id = '1';
SELECT * FROM toys;

id | toy
----+-----------------------------------------------------------
3 | {'category': 'Train', 'number_of_carriages': '10'}
2 | {'flying_range': '100m', 'type': 'Plane'}
1 | {'likes': '3', 'name': 'anewcar', 'number_of_doors': '4'}

一些限制

  1. 您无法检索集合的一部分:即使在内部映射的每个条目都存储为一列,您也只能检索整个集合
  2. 你必须选择是在键上还是在值上同时创建索引不支持。
  3. 由于映射是键入的,因此您不能输入混合值——在我的示例中,所有整数现在都是字符串

我个人认为广泛使用这种方法是一种反模式。

喂,卡罗

关于c# - CQL3 每行都有自己的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25098451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com