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

cassandra使用心得

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使用心得

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

union的作用 c语言,C语言(union类型及应用)

大端模式、小端模式“大端”和”小端”表示多字节值的哪一端存储在该值的起始地址处。大端字节序(BigEndian):最高有效位(第一字节)存于最低内存地址处,最低有效位存于最高内存处; (空间向大地址处增长)小端字节序(LittleEndian):…

Java文件下载/下载文件的案例

文章目录需求分析实现步骤示例代码下载的文件中文名显示问题需求 1.页面显示超链接 2.点击超链接后弹出下载对话框 3.完成图片文件下载 分析 超链接指向的资源如果能够被浏览器解析,则直接在浏览器中展示,如果不能解析,则弹出下载提示框。…

公司电脑监控软件_公司电脑监控软件,如何限制公司电脑网络游戏

在互联网领域里,游戏行业之所以不断推陈出新,种类繁多,最根本的原因还是由于其用户的广泛性,市场的巨大性。玩网络游戏已经是我们身边最为常见的休闲方式,手机、电脑、平板电脑,方便的数码设备为我们提供了…

derby数据库的数据_Derby数据库备份

derby数据库的数据抽象 我已经发布了许多有关Derby的博客: 同一主机上的多个Derby网络服务器 Apache Derby数据库用户和权限 与Maven和内存中Derby数据库的集成测试 这本不打算是一个系列。 但是多年来,我越来越多地使用Derby。 最近,我开…

Servlet中获取请求行的数据

package priv.lwx.javaex.servlet_demo.web.servlet.request; /*** 获取请求行的数据** author liaowenxiong* date 2021/12/29 09:22*/import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import j…

没有内存条电脑能开机吗_开机键过时了!3种电脑开机方法,能让你睡懒觉的技术还不快来学...

电脑开机谁都会,按下电源键等他几十秒就好。不过还有其他的开机方式,有的能让你睡懒觉,有的能让你炫技,还有更多创意等你发挥,想不想来尝试一下呢?能睡懒觉的定时开机如果有每天定时开机的需求,…

c语言编程数独游戏,编程做数独游戏

数独游戏非常好玩,可以训练玩家的逻辑推理能力。数独游戏的规则是:1.在99的大九宫格内,已给定若干数字,其他宫位留白,玩家需要自己按照逻辑推敲出剩下的空格里是什么数字。2.必须满足的条件&…

反引号包裹反引号_五个金色反引号

反引号包裹反引号五种琴弦 从Java 1.0开始,我们就有了字符串文字"like this" 。 我们还想要其他什么字符串? 其他编程语言为我们提供: 表达式插值: s"I am ${age - 10} years old." 插值格式: f…

c语言iota怎么用,C++ std::iota用法及代码示例

存储顺序递增分配val的[first,last]个连续值范围内的每个元素,就像在写入每个元素之后以 val递增。模板:void iota (ForwardIterator first, ForwardIterator last, T val);参数:first, lastForward iterators to the initial and…

web自动化如何在不同浏览器运行_自动化决策环节的“心脏”将如何与众不同?...

原标题:自动化决策环节的“心脏”将如何与众不同?原宝钢研究院首席研究员郭朝晖博士认为:自动化本质是感知、决策和执行的统一自动化的理论基础是控制论。控制论诞生时,控制论之父维纳思考了这样一个问题:机器和人(动物…

Servlet中获取请求头的数据

package priv.lwx.javaex.servlet_demo.web.servlet.request;/*** 获取请求头的数据** author liaowenxiong* date 2021/12/29 11:21*/ import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; import java.ut…

jdk8 :: 什么意思_JDK 13:什么是AggressiveOpts?

jdk8 :: 什么意思JVM 11中已弃用Java VM标志-XX:AggressiveOpts [请参见JDK-8199777和JDK-8199778 ]“因为其行为是不明确的。” JDK-8199778的“问题”部分进一步解释了(我强调了 ): AggressiveOpts已被用作实现各种实验性能功能的一种包罗…

c语言递归函数检测回文,在C中使用递归函数的回文测试

我试图编写用于测试字符串的程序,如果它是回文或不是,但我总是得到输出,因为它不是一个。我的代码有什么问题?在C中使用递归函数的回文测试#include #include int is_palindrome(int start, int end, char *str){if (str[start] !…

获取macos mojave_高仿MacOS教程

“潮办公”关注我们拥有一台MacBook是很多人的梦想,但是高昂的售价成功逼退了一大波人。MacBook一直以颜值高、轻薄、系统流畅而出名,那么其他的小伙伴们想体验一波苹果系统怎么办?这个软件或许能帮你。Part 1安装Mydockmydock是windows下的一…

Servlet中防止盗链的代码

package priv.lwx.javaex.servlet_demo.web.servlet.request;/*** 获取referer,防止盗链** author liaowenxiong* date 2021/12/29 11:21*/import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpSer…

android wtf_WTF连接池

android wtf让我们谈谈连接池。 我声称: 大多数流行的连接池的默认设置都很差! 对您来说,这意味着: 去查看您的连接池设置。 如果您依赖默认设置,则可能会遇到问题。 您可能有内存泄漏和应用程序无响应&#xff08…

c语言实验5上机刘若慧2017年,《《 C语言程序设计案例教程》》.ppt

《《 C语言程序设计案例教程》》.ppt课堂练习: 7、求三个整数之和: 1 只用main函数 2 用求两个整数之和的函数实现 main int a, b, c, sum; scanf “%d, %d,%d”, &a, &b, &c ; sum abc; printf “sum %d\n”,sum ; printf “%d%…

c++ vs 输出log到窗口_欧冠豪门碰撞,尤文vs巴萨,曼联vs红牛

点击上方蓝色字关注我们 “ 欧冠第二轮昨日完成8场比赛,3胜3平2负,各队保平争胜策略明显。今日各豪门再出发,竞彩推出4场热门比赛。热门014尤文vs巴萨,015曼联vs莱比锡红牛。”01—周三014 欧冠 尤文图斯vs巴塞罗那 2020-10-29 04…

Servlet中判断浏览器版本的代码

package priv.lwx.javaex.servlet_demo.web.servlet.request;/*** 获取user-agent,判断浏览器版本** author liaowenxiong* date 2021/12/29 11:21*/import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.htt…

jakarta ee_在等待Jakarta EE时

jakarta ee自Oracle在JavaOne 2017宣布将Java™EE转移到Eclipse Foundation以来已有一年多了。此后,发生了很多事情: Java™EE 8 API和实现项目已在EE4J下建立 。 Eclipse GlassFish 5.1 即将发布 。 全新的Jakarta EE规范流程指日可待。 社区显示出…