Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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
Cassandra 如何在PlayORM中实现二级索引以及如何支持/处理并发更新?_Cassandra_Playorm - Fatal编程技术网

Cassandra 如何在PlayORM中实现二级索引以及如何支持/处理并发更新?

Cassandra 如何在PlayORM中实现二级索引以及如何支持/处理并发更新?,cassandra,playorm,Cassandra,Playorm,对于处理并发更新的二级索引,有几种您自己的策略,例如: 它使用3个列族 我的问题是,PlayORM@NoSqlIndexed注释是如何实现的;需要/创建哪些额外的柱族 此外,是否支持并发更新?即,两个相互竞争的更新不可能从一个更新索引,从另一个更新表 到目前为止,Playorm中的所有索引只创建了3个表。i、 所有索引都存储在StringIndice、IntegerIndice和DecimalIndice列族中 除此之外,还有一个正在开发的模式,它将在需要时为列创建一个新表。请参阅。上的模式详

对于处理并发更新的二级索引,有几种您自己的策略,例如:

它使用3个列族

我的问题是,PlayORM
@NoSqlIndexed
注释是如何实现的;需要/创建哪些额外的柱族


此外,是否支持并发更新?即,两个相互竞争的更新不可能从一个更新索引,从另一个更新表

到目前为止,Playorm中的所有索引只创建了3个表。i、 所有索引都存储在StringIndice、IntegerIndice和DecimalIndice列族中


除此之外,还有一个正在开发的模式,它将在需要时为列创建一个新表。请参阅。

上的模式详细信息。您可以在不锁定的情况下执行并发更新

幻灯片46的问题是我不能得到假阳性吗?PlayOrm也是如此

需要注意的一点是,您可能需要在读取时解决。这就是一个例子。假设数据库中有地址为123的Fred

现在,两台服务器对Fred进行更新

  • 服务器1:Fred的新地址是456(导致删除索引123.Fred并添加456.Fred)
  • 服务器2:Fred的新地址是789(结果是删除索引123.Fred并添加789.Fred)
这意味着您的索引可能有456.fred和789.fred的副本。然后,您可以在读取时解决此问题,因为当您询问地址为456的人时,查询将返回Fred。我们还有一张票要为您解决此问题;)并删除入口

我们确实询问过如何在cassandra中进行可能的更改(如果列123.fred存在或失败,则添加列456.fred),但不确定他们是否会实现类似的功能。这将把失败推回给失败者(即最后一个编写者得到异常)。这将是很好的,但我不确定他们会做这样的功能

注意:与CQL不同,查询不会发送到所有节点。它只在包含索引的节点上加载,而不是在所有100台计算机上加载。也就是说,这样可以更好地扩展。

更多详情:在该演示文稿的第27张幻灯片上,您的链接与我们的索引几乎相同。但格式不包含1、2、3。索引格式为

Indexes=
    {"User_Keys_By_Last_Name":{
         {"adams","e5d…"}: null,
         {"alden","e80…"}: null,        
         {"anderson","e5f…"}: null,
         {"anderson","e71…"}: null,
         {"doe","e78…"}: null,
         {"franks","e66…"}: null,
          …:…,
       }
   }
通过这种方式,我们可以避免阅读,以确定是否需要在名称的后半部分使用1、2、3、4、5。相反,我们使用FK,我们知道它是唯一的,只需进行写入。Cassandra致力于解决读取过程中的冲突,这就是修复过程存在的原因。这是基于这样一个事实,即冲突发生的时间百分比非常低,并且在这个低百分比下受到打击

最后,您可以使用命令行工具查看索引!!!!它在大约200列中分批处理内容,每次流回,这样您就可以有100万个条目,命令行工具将很高兴地继续打印它们,直到您按住ctrl-c键

后来,,
院长

谢谢你的精彩解释。我没有意识到CQL会查询所有节点,你能告诉我关于这方面的更多信息吗?还有另一个问题,因为索引的行键是“众所周知的”,这可能意味着如果它被多次命中,您可能会在环中出现热点(取决于您的复制因子)?如果您使用分区,我相信CQL会命中一个分区…没有分区,它不知道(但与此格式不同,所有行都位于该节点上)。此外,是的,在任何设计中,任何人都会遇到热点或写操作,这会增加系统的负载,因为您需要写更多的内容。通常我们使用RF 3,因此您可以点击3个节点进行查询,并且通常会点击3个节点中的2个进行查询。我不确定我在哪里读到这些内容(已经读了很多)而且我并非总是100%正确,所以请随时检查/更正。(但不确定我是从哪里得到信息的)