Apache Cassandra是一种快速且可扩展的数据库,多年来,它变得与传统SQL数据库一样容易使用。 至少在表面上。

您使用类似SQL的查询,但是它们有很多限制; 您有一个模式,但是修改它并不像在SQL数据库中那样灵活; 您具有带有主键的相同表格结构,但是由于分区键和排序键之间的区别,因此更加复杂。 乍看之下,有很多底层细节并不重要,但它们对于性能和数据一致性至关重要,例如墓碑,SSTable压缩等。

但是我想讨论“列表”列类型,因为最近我们遇到了一个非常难以捉摸的问题。 我们致力于保证数据的完整性,这就是为什么我们的记录永远不会更新的原因。 这很适合Cassandra,因为要正确地进行更新很棘手。 但是,在我们的一个部署中,我们注意到了一些奇怪的事情–很少有,在与索引数据进行比较时,数以百万计的特定条目中的数据散列将不匹配。 经过调查,我们注意到“列表”类型的列具有重复值。 这不是代码的问题,因为在这种特殊情况下,代码始终使用Collections.singletonList(..)

似乎Cassandra试图变得更聪明,并且当在批处理插入中看到相同的条目时,它试图合并它们,而不是覆盖彼此,而是尝试将它们合并,从而产生具有重复条目的列表。 有关此问题的报告在此处和此处 。

现在,批处理是一个困难的话题,而看起来却很简单却不是的事情之一。 在大多数情况下, 批次是反模式 。 在某些情况下,批处理是有用的 ,但是它比预期的少得多。 那是由于Cassandra的分布式性质。 另一个麻烦来自于您使用的是令牌感知客户端还是令牌感知客户端策略,即您的客户端是否知道每个记录所属的位置以便向其发送请求。 我不会详细介绍批处理,因为在这两篇链接的文章中对批处理进行了很好的解释。

返回列表–由于在我们的案例中我们没有相同的记录,因此该问题很可能是由于网络超时而导致的,此时客户端未收到写入确认,而是再次尝试再次发送相同的语句。 我不确定是否批量处理。 但是,假设有批次或无批次可能会更安全。 即列表可以在意外情况下合并。

这是根本不使用列表的严重原因。 沃尔玛给出了其他参数

集应优先于列表,因为集(和地图)应避免
写前读模式用于更新和删除

这仅适用于少量物品。 对大量(例如数千个)项目使用集合是另一个问题,因为您无法分批加载项目-可以一次读取所有项目。

例如,在Java应用程序中,即使基础列的类型为List,也可以轻松地用Set替换List,这将暂时避免出现问题-数据仍可能在数据库中重复,但是至少应用程序会使用独特的价值观。 但是请记住,Java Set不能保证排序,因此,如果这对您的逻辑很重要,请确保按照定义明确的比较标准进行排序。

“避免清单”(和“避免批次”)的一般建议可以准确地描述Cassandra。 它看起来易于使用,但是一旦投入生产,您可能会意识到存在一些次优的设计决策。

翻译自: https://www.javacodegeeks.com/2019/02/avoid-lists-cassandra.html

避免在Cassandra中使用清单相关推荐

  1. cassandra使用心得_避免在Cassandra中使用清单

    cassandra使用心得 Apache Cassandra是一种快速且可扩展的数据库,多年来,它变得与传统SQL数据库一样容易使用. 至少在表面上. 您使用类似SQL的查询,但是它们有很多限制: 您 ...

  2. 无法在证书存储区中找到清单签名证书的解决办法

    以前的一个项目今天打开忽然提示说"无法在证书存储区中找到清单签名证书",很郁闷,不知道怎么回事.最好在 工程属性里面--签名--为Clickonce清单签名 去掉 .再次生成居然成 ...

  3. 介绍Cassandra中的压缩

    在<如何安装和配置Cassandra>中,我们可以在DataFileDirectories中配置数据的存放位置. 当Cassandra启动后,向其中插入的数据就会放在DataFileDir ...

  4. Cassandra中的数据建模

    在关系数据模型中,我们为域中的每个对象建模关系/表. 对于Cassandra,情况并非如此.本文将详细介绍在Cassandra中进行数据建模时需要考虑的所有方面. 以下是Cassandra数据建模的粗 ...

  5. SAP中供应商清单输出方法

    SAP中供应商清单输出是比较常见的需求.比如相关部门有可能需要统计某类别供应商的数量,某年度新增了多少供应商等. 前台事务MKVZ供应商清单提供了基础功能.但该功能的选择条件及输出字段比较少,又无法灵 ...

  6. Cassandra 中的Snitch

    Cassandra中的Snitch是用来告诉Cassandra网络的拓扑结构,比如节点之间的相对距离,节点的如何分组,节点所在的rack,从而对用户请求可以进行高效的路由. 注意:一个集群中的所有的节 ...

  7. SAP中货源清单创建的几种方法

    SAP中采购货源清单创建的方法有以下几种: 1.ME01 手动逐个创建. 2.ME05 系统自动批量创建. 3.通过信息记录中的菜单"附加"-"源清单"创建. ...

  8. SAP中报表清单导出的常用方法

    企业SAP应用中存在大量的报表清单导出需求,常用方法有多种.梳理如下(个人笔记,供参考): 一.前台事务T-code方式 前台事务T-code方式的优点是基于系统标准功能,用户基本可以自行完成操作.其 ...

  9. SAP中利润中心清单输出请求处理实例

    近期接财务同事请求,需要导出系统中的利润中心清单.利润中心清单应该是比较常规的需求.前台事务应该可以处理.抱着这样的想法,笔者花了一点时间查找,终于在菜单如下图位置找到对应功能事务KE5X. 经对该事 ...

最新文章

  1. mysql function 与 procedure
  2. css初始化_CodeMirror项目【在线编辑器】--项目初始化
  3. Docker最全教程——从理论到实战(三)
  4. [XSY4170] 妹子(线段树上二分)
  5. 王道操作系统考研笔记——2.1.9 调度算法
  6. 电脑pro,大师屏幕,小米归来!小米笔记本Pro 15 OLED首发评测
  7. 让一个元素水平垂直居中的方法
  8. apache+mysql+php的环境配置
  9. [*C*]将整数转化为十进制字符串的函数Convert integer to Decimal string
  10. (转)苹果推送通知服务教程 Apple Push Notification Services Tutorial
  11. 深入理解Nginx负载均衡和反向代理_学习笔记
  12. 基于n元语言模型整句拼音汉字转换
  13. 纹理(Textures)
  14. 服务器的组件中支持冗余的包括,服务器冗余电源的作用
  15. docker容器技术之虚拟化网络概述(四)
  16. 基于51单片机的电子记分牌的设计
  17. 如何在服务器查看文件,如何在服务器地址上查看文件夹
  18. 解决pycharm里显示数据不完全问题(pandas)
  19. 中文文案排版风格指南
  20. WEBRTC需要,配置自己的 TURN/STUN 服务

热门文章

  1. codeforces773 D. Perishable Roads(思维+最短路)
  2. 纪中C组模拟赛总结(2019.8.9)
  3. 【图论】【Kosaraju】刻录光盘(ssl 2344)
  4. CF526G Spiders Evil Plan(树上最优性问题、倍增+线段树)
  5. codeforces 938E MaxHistory 组合数学
  6. 算法二之树形选择排序
  7. 如何加快github的clone速度
  8. Js如何判断undefined和null
  9. C++描述杭电OJ 2020.绝对值排序 ||
  10. Boostrap技能点整理之【bootstrap简介】