Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nosql 卡桑德拉列键自动递增_Nosql_Cassandra - Fatal编程技术网

Nosql 卡桑德拉列键自动递增

Nosql 卡桑德拉列键自动递增,nosql,cassandra,Nosql,Cassandra,我试图理解Cassandra以及如何构造我的列族(CF),但这很难,因为我已经习惯了关系数据库 例如,如果我创建简单的usersCF,并尝试插入新行,那么如何生成类似MySQL的增量键 我看到了很多例子,在这些例子中,你只需要输入用户名而不是唯一的ID,这会有点道理,但是如果我希望用户有重复的用户名呢 另外,据我所知,cassandra不支持操作符,因此像select*这样的东西无法从用户那里得到,而something>something2则无法工作,我如何进行搜索呢 也许最重要的问题是分组呢?

我试图理解Cassandra以及如何构造我的列族(CF),但这很难,因为我已经习惯了关系数据库

例如,如果我创建简单的
users
CF,并尝试插入新行,那么如何生成类似MySQL的增量键

我看到了很多例子,在这些例子中,你只需要输入用户名而不是唯一的ID,这会有点道理,但是如果我希望用户有重复的用户名呢

另外,据我所知,cassandra不支持
操作符,因此像
select*这样的东西无法从用户那里得到,而something>something2
则无法工作,我如何进行搜索呢

也许最重要的问题是分组呢?我是否需要检索所有数据,然后用我使用的任何语言对其进行过滤?我想那会让我的系统慢很多


所以基本上我需要一些简单的解释,如何开始学习卡桑达。

你的问题很笼统,但让我来尝试一下。首先,您需要根据查询对数据进行建模。使用RDBMS,您可以以某种规范化的形式对数据进行建模,然后针对特定的查询进行优化。你不能对卡桑德拉这样做;你必须按照你想读的方式写数据。通常这意味着要用多种方式书写。总的来说,如果您想有效地与Cassandra合作,那么完全摆脱RDBMS思维是有帮助的

关于钥匙:

  • 它们在卡桑德拉中被用作环上的分布单位。因此,您的密钥将被散列并在环中指定一个“所有者”。使用RandomPartitioner确保均匀分布

  • 假设您使用了RandomPartitioner(您应该),则不会对键进行排序。这意味着您不能要求一系列钥匙。但是,您可以在单个查询中请求密钥列表

  • 键在某些型号中相关,而在其他型号中不相关。如果您的模型需要按键查询,则可以使用应用程序知道的任何唯一值(如UUID)。有时键是哨兵值,例如表示一天开始的Unix历元。这允许您将一组已知的键交给Cassandra,然后获得按列排序的数据范围(见下文)

关于查询谓词:

  • 假设您对数据进行了正确建模以回答您的查询,则可以获得数据范围

  • 由于列是按排序顺序写入的,所以可以使用切片查询(非常快速)来查询从列a到列n的范围。您还可以使用复合列稍微抽象一下这种机制

  • 您可以在基数较低的列上使用二级索引——这提供了按值查询功能

  • 您可以创建自己的索引,以便按照需要的方式对数据进行排序

关于分组:


我想你指的是创建聚合。如果您需要实时数据,您需要使用一些外部机制(如)来跟踪数据,并不断将相关聚合更新到CF中。如果您在批处理过程中创建聚合,Cassandra与Hadoop具有出色的集成,允许您在Pig、Hive和,或者直接使用您选择的语言。

您可能需要查看PlayOrm。虽然我同意您需要打破RDBMS思维,但有时将主键作为用户ID是错误的选择。有时它是正确的选择(取决于您的需求)

PlayOrm是noSQL和关系概念的混合体,因为您需要两者,并且您可以使用连接和所有东西来执行可伸缩SQL。您只需将您认为将增长到数十亿/万亿行的表进行分区,就可以查询到这些分区。即使使用CQL,也需要对表进行分区。你能用什么划分呢?对于某些用例来说,时间是好的。其他的可以由客户端进行分区,因为每个客户端实际上都是noSQL集群中的一个小型数据库


就密钥而言,PlayOrm生成唯一的“群集”密钥,即主机名唯一的主机名,基本上类似于TimeUUID,只是在a1、a2、a3等集群中使用主机名时,密钥会更短,可读性更强。对于第一个问题:

我可以像mysql一样制作增量密钥吗

不,不是真的——不是卡桑德拉本地人您可以在此处查看更多信息:

第二个问题是关于如何存储和建模Cassandra数据

查看stackoverflow的搜索选项。很多有趣的问题

  • 最重要的是,

    Cassandra支持计数器(),但也有一些限制。