gpt4 book ai didi

cassandra - 具有相同主键的行插入正在替换 Cassandra 中以前的写入

转载 作者:行者123 更新时间:2023-12-03 06:38:43 24 4
gpt4 key购买 nike

在 Cassandra 中创建了一个表,其中主键基于两列(组名、类型)。当我尝试插入多于 1 行且组名和类型相同的行时,在这种情况下它不会存储多于一行,后续写入组名和类型相同的位置。然后最新的写入将替换以前类似的写法。为什么 Cassandra 以这种方式替换而不是写入插入的每一行?

写1

cqlsh:resto> insert into restmaster (rest_id,type,rname,groupname,address,city,country)values(blobAsUuid(timeuuidAsBlob(now())),'SportsBar','SportsDen','VK Group','Majestic','Bangalore','India');

写2

insert into restmaster (rest_id,type,rname,groupname,address,city,country)values(blobAsUuid(timeuuidAsBlob(now())),'SportsBar','Sports Spot','VK Group','Bandra','Mumbai','India');

写3

cqlsh:resto> insert into restmaster (rest_id,type,rname,groupname,address,city,country)values(blobAsUuid(timeuuidAsBlob(now())),'SportsBar','Cricket Heaven ','VK Group','Connaught Place','New Delhi','India');

我期待的结果(检查第 4、5、6 行)

 groupname      | type       | rname
----------------+------------+-----------------
none | Udipi | Gayatri Bhavan
none | dinein | Blue Diamond
VK Group | FoodCourt | FoodLion
VK Group | SportsBar | Sports Den
VK Group | SportsBar | Sports Spot
VK Group | SportsBar | Cricket Heaven
Viceroy Group | Vegetarian | Palace Heights
Mainland Group | Chinese | MainLand China
JSP Group | FoodCourt | Nautanki
Ohris | FoodCourt | Ohris

但这就是实际结果(写入 3 已替换了之前的 2 个插入 [第 4,5 行])

 cqlsh:resto> select groupname,type,rname From restmaster;

groupname | type | rname
----------------+------------+-----------------
none | Udipi | Gayatri Bhavan
none | dinein | Blue Diamond
VK Group | FoodCourt | FoodLion
VK Group | SportsBar | Cricket Heaven
Viceroy Group | Vegetarian | Palace Heights
Mainland Group | Chinese | MainLand China
JSP Group | FoodCourt | Nautanki
Ohris | FoodCourt | Ohris


cqlsh:resto> describe table restmaster;

CREATE TABLE restmaster (
groupname text,
type text,
address text,
city text,
country text,
rest_id uuid,
rname text,
PRIMARY KEY ((groupname), type)
) WITH
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.100000 AND
gc_grace_seconds=864000 AND
index_interval=128 AND
read_repair_chance=0.000000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
default_time_to_live=0 AND
speculative_retry='99.0PERCENTILE' AND
memtable_flush_period_in_ms=0 AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'LZ4Compressor'};

最佳答案

对 Cassandra 数据库的所有插入实际上都是插入/更新操作,并且每个唯一定义的主键只能有一组非键值。这意味着一个主键不能拥有多于一组的值,并且您只能看到最后一次写入。

更多信息: http://www.datastax.com/documentation/cql/3.1/cql/cql_intro_c.html

更新:数据模型

如果您使用了类似的 key

Primary Key ((groupname),type,rname)

只要您有独特的餐厅名称,您就能够获得您期望的结果。但您真正应该问的是“我想对这些数据执行什么查询?”所有 Cassandra 表都应基于满足一类查询。我上面写的关键基本上是说“构建此表是为了快速查找特定组中的所有餐厅,我将使用的唯一条件是类型和餐厅名称”

可以使用该架构执行的示例查询

 SELECT * FROM restmaster WHERE groupname = 'Lettuce Entertain You' ;
SELECT * FROM restmaster WHERE groupname = 'Lettuce Entertain You' and type = 'Formal' ;
SELECT * FROM restmaster WHERE groupname = 'Lettuce Entertain You' and type = 'Formal'
and rname > 'C' and rname < 'Y' ;

如果这不是您希望在应用程序中执行的查询类型,或者您希望除此之外还需要其他查询,那么您很可能需要其他表。

关于cassandra - 具有相同主键的行插入正在替换 Cassandra 中以前的写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25817451/

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