SQL快速修改时问题

pacheCassandra是一个快速、可伸缩的数据库,多年来它几乎和传统的SQL数据库一样容易使用。至少在表面上。

您使用类似SQL的查询,但它们有很多限制;您有一个模式,但是修改它不像在SQL数据库中那样灵活;您的表结构与主键相同,但由于分区键和排序键之间的区别,它更复杂。还有很多底层的细节在一开始似乎无关紧要,但对于性能和数据一致性至关重要,比如墓碑、SST可压缩等等。

但我想讨论一下“列表”列类型,因为最近我们遇到了一个非常难以捉摸的问题。我们在这就是为什么我们的记录永远不会更新。这对卡桑德拉来说是个很好的选择,因为更新是很棘手的。但是在我们的一次部署中,我们注意到了一些奇怪的东西--很少有数以百万计的特定条目中的数据散列与索引数据的比较结果不匹配。在调查时,我们注意到一个类型为“list”的列得到了重复的值。这不是代码的问题,因为在这种特殊情况下,代码总是使用Collections.singletonList(..)

看起来,Cassandra试图变得聪明,当它在批插入中看到相同的条目时,而不是用另一个替换一个,而是尝试合并它们,从而生成一个包含重复条目的列表。报告了这一问题的情况。

现在,批次是一个很难的话题,其中一件事情看起来很直截了当,但并不是这样。在大多数情况下但它比预期的要少见。那是因为卡桑德拉的分布性质。另一个复杂的问题来自您是使用令牌感知的还是没有意识到的客户端策略,即您的客户端是否知道每个记录的归属位置以便将请求发送给它。我将不详细讨论批处理,因为它们在这两篇链接的文章中都有很好的解释。

返回到列表--因为在我们的示例中,在批处理中没有相同的记录,这个问题可能是由于网络超时导致的,客户端没有收到写入的确认并再次尝试发送相同的语句。不管是成批还是不成批,我都不确定。但可能更安全的假设是,它可能发生在或没有一批。也就是说,列表可以在意外情况下合并。

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

这只是为了一小部分物品。对于大量的项目(例如数千项)使用集合是另一个问题,因为您不能分部分加载项目--它们都是一次读取的。

https://movie.douban.com/subject/5092621/discussion/620439301/

例如,在Java应用程序中,即使基础列为List类型,也可以轻松地用集合替换列表,这将有助于暂时避免这些问题--数据库中的数据可能仍然会重复,但至少应用程序将使用唯一的值。不过,请记住,Java集合并不保证排序,因此,如果它对您的逻辑很重要,请确保您按照一些定义良好的比较标准进行排序。

https://www.douban.com/note/811141093/

“避免清单”(和“避免批次”)的一般建议描绘了卡桑德拉的准确图景。它看起来很简单,但是一旦您进入生产阶段,您可能会意识到有一些次优的设计决策。

。我必须使用Conscrapt TrustManager(使用JDK中所有受信任的证书初始化)建立连接:

https://www.douban.com/note/811237689/

1
2
3
4
5
6
7
8
9
10
11
12
13
KeyStore trustStore = KeyStore.getInstance("JKS");
trustStore.load(new FileInputStream(System.getenv("JAVA_HOME") + "/lib/security/cacerts"), "changeit".toCharArray());
ctx.init(null,new TrustManager[] {new TrustManagerImpl(trustStore,
    null, null, null, logStore, null,
    new StrictCTPolicy())}, new SecureRandom());
         
 
URL url = new URL(
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(ctx.getSocketFactory());
conn.connect();
conn.getInputStream();
conn.disconnect();

当然,它一开始就不起作用,因为康瑞普没有提供一些需要的核心接口的实现--CTLogStore和CTPolicy类。CTLogStore实际上是保存所有已知日志信息的重要部分(我仍然觉得调用“日志提供程序”只是“日志”很奇怪,但这是公认的术语)。有一在这很酷,但我花了一段时间(在外部帮助下)弄清楚这些公钥到底是什么。他们是-RSA,ECC?它们是如何编码的?您在RFC或文档中找不到这一点。可能是它是“SubjectPublicKeyInfo ASN.1结构的DER编码”。啊

posted @ 2021-08-27 13:34  javd9w  阅读(74)  评论(0)    收藏  举报