gpt4 book ai didi

cassandra - Cassandra 3.0更新了SSTable格式

转载 作者:行者123 更新时间:2023-12-04 13:37:48 24 4
gpt4 key购买 nike

根据this问题,Cassandra的存储格式已在3.0中更新。

如果以前可以使用cassandra-cli来查看SSTable的构建方式,则可以得到以下内容:

[default@test] list phonelists;
-------------------
RowKey: scott
=> (column=, value=, timestamp=1374684062860000)
=> (column=phonenumbers:bill, value='555-7382', timestamp=1374684062860000)
=> (column=phonenumbers:jane, value='555-8743', timestamp=1374684062860000)
=> (column=phonenumbers:patricia, value='555-4326', timestamp=1374684062860000)
-------------------
RowKey: john
=> (column=, value=, timestamp=1374683971220000)
=> (column=phonenumbers:doug, value='555-1579', timestamp=1374683971220000)
=> (column=phonenumbers:patricia, value='555-4326', timestamp=137468397122

最新版本的Cassandra的内部正式外观是什么样的?你能举个例子吗?

我可以使用哪种实用程序以上面列出的方式查看Cassandra中表的内部表示形式,但是使用新的SSTable格式?

我在互联网上发现的所有内容是分区标题存储列名称的方式,行存储聚类值的方式,并且没有重复的值。

我该怎么看?

最佳答案

在3.0之前的版本中,sstable2json是一个有用的实用程序,可帮助您了解SSTables中数据的组织方式。此功能目前在cassandra 3.0中不存在,但最终会有替代方法。在此之前,我和Chris Lohfink都为Cassandra 3.0开发了sstable2json(sstable-tools)的替代方案,您可以使用它来了解数据的组织方式。在CASSANDRA-7464中有一些关于将其引入适当的 Cassandra 的讨论。

A key differentiator between the storage format between older verisons of Cassandra and Cassandra 3.0 is that an SSTable was previously a representation of partitions and their cells (identified by their clustering and column name) whereas with Cassandra 3.0 an SSTable now represents partitions and their rows.



您可以通过这些更改的主要开发人员访问 blog post来详细了解这些更改,他们非常努力地详细解释了这些更改。

您将看到的最大好处是,在一般情况下,由于一些关键的增强功能消除了CQL引入的许多开销,因此数据大小会缩小(在某些情况下会大大减少)。

这是显示C * 2和3之间差异的示例。

架构:
create keyspace demo with replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
use demo;
create table phonelists (user text, person text, phonenumbers text, primary key (user, person));
insert into phonelists (user, person, phonenumbers) values ('scott', 'bill', '555-7382');
insert into phonelists (user, person, phonenumbers) values ('scott', 'jane', '555-8743');
insert into phonelists (user, person, phonenumbers) values ('scott', 'patricia', '555-4326');
insert into phonelists (user, person, phonenumbers) values ('john', 'doug', '555-1579');
insert into phonelists (user, person, phonenumbers) values ('john', 'patricia', '555-4326');

sstable2json C * 2.2输出:
[
{"key": "scott",
"cells": [["bill:","",1451767903101827],
["bill:phonenumbers","555-7382",1451767903101827],
["jane:","",1451767911293116],
["jane:phonenumbers","555-8743",1451767911293116],
["patricia:","",1451767920541450],
["patricia:phonenumbers","555-4326",1451767920541450]]},
{"key": "john",
"cells": [["doug:","",1451767936220932],
["doug:phonenumbers","555-1579",1451767936220932],
["patricia:","",1451767945748889],
["patricia:phonenumbers","555-4326",1451767945748889]]}
]

sstable-tools toJson C * 3.0输出:
[
{
"partition" : {
"key" : [ "scott" ]
},
"rows" : [
{
"type" : "row",
"clustering" : [ "bill" ],
"liveness_info" : { "tstamp" : 1451768259775428 },
"cells" : [
{ "name" : "phonenumbers", "value" : "555-7382" }
]
},
{
"type" : "row",
"clustering" : [ "jane" ],
"liveness_info" : { "tstamp" : 1451768259793653 },
"cells" : [
{ "name" : "phonenumbers", "value" : "555-8743" }
]
},
{
"type" : "row",
"clustering" : [ "patricia" ],
"liveness_info" : { "tstamp" : 1451768259796202 },
"cells" : [
{ "name" : "phonenumbers", "value" : "555-4326" }
]
}
]
},
{
"partition" : {
"key" : [ "john" ]
},
"rows" : [
{
"type" : "row",
"clustering" : [ "doug" ],
"liveness_info" : { "tstamp" : 1451768259798802 },
"cells" : [
{ "name" : "phonenumbers", "value" : "555-1579" }
]
},
{
"type" : "row",
"clustering" : [ "patricia" ],
"liveness_info" : { "tstamp" : 1451768259908016 },
"cells" : [
{ "name" : "phonenumbers", "value" : "555-4326" }
]
}
]
}
]

虽然输出更大(更多是该工具的结果)。您可以看到的主要区别是:
  • 数据现在是分区及其行(包括单元格)的集合,而不是分区及其单元格的集合。
  • 时间戳现在位于行级别(liveness_info),而不是单元级别。如果某些行单元的时间戳不同,则新的存储引擎会进行增量编码以节省空间,并在单元级别上关联差异。这也包括TTL。可以想象,如果您有很多非关键列,那么可以节省大量空间,因为不需要重复时间戳。
  • 群集信息(在这种情况下,我们是基于“人”群集的)现在显示在行级别而不是单元级别,这节省了大量开销,因为群集列值不必位于单元级别。

  • 我应该注意,在这个特定的示例数据案例中,由于只有1个非集群列,因此无法完全实现新存储引擎的优势。

    这里还有许多其他未显示的改进(例如,存储行级范围逻辑删除的功能)。

    关于cassandra - Cassandra 3.0更新了SSTable格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34570367/

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