- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Cassandra 问题。您知道 Cassandra 如何更新/增加计数器吗?
我想使用一个可以写入 cassandra 的 Storm bolt (来自 Storm-contrib repo on github 的 CassandraCounterBatchingBolt)。但是,我不确定 incrementCounterColumn() 方法的某些实现是如何工作的......而且还有 cassandra 计数器的限制(来自:http://wiki.apache.org/cassandra/Counters)这使得它们对我的场景没用恕我直言:
Example:
Say I have 3 cassandra nodes. The counters on each of these nodes are 0.
Node1:0, node2:0, node3:0An increment comes: 5 -> Node1:0, node2:0, node3:0
Increment starts at node 2 – still needs to propagate to node1 and node3
Node1:0, node2:5, node3:0In the meantime, another increment arrives before previous increment
is propagated: 3 -> Node1:0, node2:5, node3:0Assuming 3 starts at a different node than where 5 started we have:
Node1:3, node2:5, node3:0
最佳答案
C* 中的计数器具有复杂的内部表示,可以避免在无领导分布式系统中计算事物的大多数(但不是全部)问题。我喜欢将它们视为分片计数器。一个计数器由许多由主机 ID 和版本号标识的子计数器组成。接收到计数器操作的主机只会增加自己的子计数器,也会增加版本。然后它将其整个计数器状态复制到其他副本,这些副本将其与其状态合并。当计数器被读取时,处理读取操作的节点通过总结来自每个主机的计数的总和来确定计数器值。
在每个节点上,计数器增量就像 Cassandra 中的其他所有内容一样,只是一次写入。增量写入到内存表中,本地值在读取时通过合并内存表和所有 SSTable 中的所有增量来确定。
当我说您不必担心计数器的递增速度超过 Cassandra 的处理速度时,我希望这个解释能帮助您相信我。由于每个节点都保留自己的计数器,并且从不复制增量操作,因此不可能像读取-修改-写入场景那样引入竞争条件导致计数丢失。如果 Cassandra 接受写入,您几乎可以保证它会计数。
但是,您不能保证的是,除非计数始终显示正确。如果将增量写入一个节点,但随后从另一个节点读取计数器值,则不能保证增量已被复制,您还必须考虑在网络分区期间会发生什么。这或多或少与 Cassandra 中的任何写入相同,它具有最终一致性的性质,并且取决于您用于操作的一致性级别。
还存在丢失确认的可能性。如果您在获得响应之前执行增量并断开与 Cassandra 的连接,您将无法知道您的写入是否得到了响应。当您恢复连接时,您也无法判断,因为在增加之前您不知道计数是多少。这是选择可用性而不是一致性的系统的一个固有问题,并且您为许多其他好处付出了代价。
最后,快速删除、增量、删除的问题是真实存在的,您应该避免。问题是增量操作本质上会重新激活列,如果这些操作彼此足够接近,它们可能会获得相同的时间戳。 Cassandra 严格执行最后写入,并根据操作的时间戳确定最后一个。如果两个操作具有相同的时间戳,则“较大”的一个获胜,这意味着按照严格的字节顺序排序的那个。这是真实的,但我不会太担心,除非您对相同的值进行非常快速的写入和删除(这可能是您的数据模型中的错误)。
这是 Cassandra 计数器内部结构的很好指南:http://www.datastax.com/wp-content/uploads/2011/07/cassandra_sf_counters.pdf
关于cassandra - 如何在 Cassandra 中快速增加计数器而不会过时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20953821/
我们有 2 个 cassandra 集群,第一个有旧数据,第二个有新数据。 现在我们想要将旧数据从第一个集群移动或复制到第二个集群。什么是最好的方法来做到这一点以及如何做到这一点? 我们正在使用 DS
我正在考虑安装 OpsCenter 来监控我们在 RackSpace VM 上运行的 24 节点 Cassandra 集群。过去我听说 OpsCenter 减慢了集群速度。我有点担心 OpsCente
假设我有一个复制因子(RF)= 2 的 2 节点集群。 我使用一致性 2 触发插入。当客户端等待响应时,Cassandra 开始写入这 2 个节点。中间一个节点失败,无法完成写入,而另一节点上的写入成
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足 Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以
我在 Cassandra 中有一个表,其中我用 1000 多个条目填充了一些行(每行有 10000 多列)。行中的条目更新非常频繁,基本上只是一个字段(它是一个整数)被更新为不同的值。列的所有其他值保
当Cassandra端有“掉落的突变”时,它是否向调用客户端返回相应的失败?或者即使在服务器端丢弃相应的突变并导致数据丢失,它总是成功响应调用事务的调用客户端? 在一个特定实例中,当我们的 TPS 约
我有一个 Multi-Tenancy 应用程序,其中 tenantId 将成为每个查询的一部分,因此我将其放入所有表的分区键中。 例子: CREATE TABLE users { tenantId t
根据 Datastax 文档,在 Cassandra 中先读后写是一种反模式。 每当我们在 CQLSH 中使用 UPDATE 或使用 Datastax 驱动程序来设置几列(带有 IF 和集合更新)时,
是否有命令或任何方式可以知道 Cassandra 的哪些节点上存储了哪些数据? 我对 Cassandra 很陌生,在谷歌上搜索这个问题并没有多少运气。 谢谢! 最佳答案 您可以使用 nodetool
我们有一个包含 1500 万条记录的表,而我们的表是一个 10 节点的 cassandra 集群。我们有一列有接近 20 个可重复值。是否建议在此列上建立二级索引? 最佳答案 假设在该列上完全均匀分布
Cassandra 发布了它的 technical limitations但没有提到允许的最大列数。是否有最大列数?我需要存储 400 多个字段。这在 Cassandra 中可能吗? 最佳答案 每行的
我想知道当表中有多个非 PK 列时会发生什么。我读过这个例子: http://johnsanda.blogspot.co.uk/2012/10/why-i-am-ready-to-move-to-cq
我有两个关于 Cassandra 查询结果的问题。 当我在 Cassandra 中对表进行“完全”选择(即 select * from table )时,是否保证结果将按分区标记的递增顺序返回? 例如
我无法为 Cassandra 设置 Hector。我已经浏览了 documentation和 Cassandra wiki .这些文档的问题在于,那里的很多信息都已经过时或过时(或者我缺乏知识)。无论
我正在使用 DataStax Enterprise 中 cassandra 中提供的压力测试。如果有人知道的话,我也想要一些关于它和 cassandra 的信息。 - 首先,压力测试使用哪些节点?我的
当我在 CQL 中创建表时,列的顺序是否必须精确 不是 在主键和 中不是 聚类列: CREATE TABLE user ( a ascii, b ascii, c ascii,
我有一张如下表: CREATE TABLE tab( categoryid text, id text, name text, author text, des
我正在尝试学习 Cassandra,但对术语感到困惑。 很多情况下它表示该行存储键/值对。 但是,当我定义一个表时,它更像是声明一个 SQL 表,即;您创建一个表并指定列名和数据类型。 谁能澄清一下?
如何对 cassandra 数据实现审计? 我正在寻找一个开源选项。 cassandra 是否有任何有助于审计的功能? 我可以使用触发器将记录记录到表中吗?我关注了 Triggers示例并且能够将记录
我遇到了一个问题“me.prettyprint.hector.api.exceptions.HUnavailableException:: 可能没有足够的副本来处理一致性级别。”当我有 RF=1 时,
我是一名优秀的程序员,十分优秀!