问题标签 [clustering-key]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
153 浏览

cassandra - Cassandra 数据建模和集群设计

我对设计 Cassandra 的数据模型有点困惑,来自 SQL 背景!我已经Datastax多次阅读文档以了解有关 Cassandra 的许多事情!这似乎是个问题,不知道如何克服这个问题以及我应该选择的数据模型类型!

主键和聚类在这里得到了很好的解释!文档说,主键(分区键,集群键)是数据模型中最重要的东西。

我的用例非常简单:

ITEM_ID将是独一无二的(partition_key),每个项目可能有 10-20 个移动记录!I wanted to get the movement records of an item sorted by time it's created on.所以我决定使用CREATED_ON集群键。

根据文档,clustering_key 属于二级索引,与分区键不同,它应该是尽可能多的可重复值。我的数据模型在这里完全失败了!How do I preserve order using clustering to achieve the same?

显然,我不能在 Application 中创建一些 ID 生成登录,因为它在许多实例上运行,如果我必须依靠一些逻辑,最终 Cassandra 的目的就是在这里折腾。

0 投票
1 回答
158 浏览

cassandra - Cassandra 集群密钥使用

我正在努力解决这个问题,但坦率地说,我的大脑无法理解——至少看起来是这样。

我有一个专栏家族,为相当多的演员工作。它是一个中央作业管理和调度表,必须在整个集群中分布和可用,甚至可能在不久的将来的某一天穿越数据中心的障碍。

每个作业执行器参与者系统,即实际执行作业的系统,都安装在一个 Cassandra 节点旁边 - 即在同一个节点上。实际上,当然有 s 主演员拉动工作并将它们分配给演员代理,但这与我的问题无关。

还有一些参与者系统可以在中央作业表中创建作业以供其他参与者甚至参与者系统执行,但通常这些作业是批量加载或通过 Web 界面手动加载的。

要执行作业的参与者总是只查询它的本地 cassandra 节点。如果完成,它将更新作业表以指示它已完成。在正常情况下,此写入也应该只更新具有他的本地 Cassandra 节点具有权威性的作业的记录。

现在,有时可能会发生给定主机上的参与者系统无关的情况。在这种情况下,它确实也应该从其他节点获得作业,但当然它仍然只会与它的本地 Cassandra 节点对话。我知道这行得通,它并没有打扰我。

让我彻夜难眠的是:

我将如何创建一个复合键来实现 Cassandra 节点的本地权威,以获取其本地参与者系统的作业条目,从而实现它的作业执行参与者,而无需将作业表拆分为多个列族等?

换句话说:我如何创建一个复合键,以确保 a)作业在我的集群中均匀分布,b)作业表上的本地查询仅返回此 Cassandra 节点对其具有权威性的作业,以及 c)我的分布式代理系统仍然有可能从其他节点获取作业,以防它没有自己的作业可以执行???

关于上面 c) 的最后一句话。在没有本地工作的情况下,我不想做 2 次查询,但仍然只有 on!

对此有任何提示吗?

到目前为止,这是作业表的一般结构:

仍在设置所有内容的过程中,因此到目前为止没有定义查询。但是演员会从中拉出工作并设置状态等

0 投票
1 回答
293 浏览

sql-server - 更改现有表上的群集键 - SQL Server 2008

我接到了一项任务来提高对表的查询性能。

主键是GUID由应用程序代码创建的,因此不是顺序的,并且表上没有单独的顺序聚类键。

我的感觉是,选择非序列GUID作为主键和集群键是导致性能不佳的主要原因。我打算删除聚集索引GUID并添加一个INT IDENTITY 作为聚集键。

该表中有大约 300 万行。

是尝试修改表,还是创建一个新表,将现有数据复制到其中,删除旧表并重命名新表更好?

编辑:复制 300 万行需要长时间。删除索引会更快吗?

编辑 2:决定用硬件解决复制速度慢的问题,并投入了 20 个核心而不是 4 个。现在速度要快得多,但仍然比我预期的要慢得多。我估计复制 300 万行需要 30 分钟。

虽然这只是一个测试,但我仍然希望有一个解决方案,我仍然必须在生产服务器上进行,我宁愿不要让它超过必要的时间。

有关信息,根据@ughai 的建议,我的自动增长设置现在为 500Mb。

这种事情并不是我的专长,所以希望得到一些关于什么是解决这个问题的最佳方法的建议。

如果相关,则在此表上发生的大部分查询都没有连接。

编辑:原始表架构

目标表架构

我的复制查询

执行计划

在此处输入图像描述

如果从图片中看不清楚,99% 的计划都花在了新标识列上的聚集索引插入上

0 投票
1 回答
8916 浏览

cassandra - Cassandra - 查询集群键

我刚刚开始使用 Cassandra,我试图创建具有不同分区和集群键的表,以查看如何以不同方式查询它们。

我创建了一个主键形式为 - (a),b,c 的表,其中 a 是分区键,b,c 是集群键。

查询时我注意到以下查询:

结果是:

无法执行此查询,因为它可能涉及数据过滤,因此可能具有不可预测的性能。如果您想在性能不可预测的情况下执行此查询,请使用 ALLOW FILTERING

并且使用“允许过滤”可以得到我想要的东西(即使我听说它对性能不利)。

但是当我运行以下查询时:

它说:

PRIMARY KEY 列“c”不能被限制(前面的列“b”要么不受限制,要么受非 EQ 关系限制)

而且根本没有“允许过滤”选项。

我的问题是- 为什么所有集群键的处理方式不同?与分区键 'a' 相邻的 b 列有一个“允许过滤”选项,它允许查询它,而查询列 'c' 似乎根本不可能(考虑到该表的布局方式)。

ALLOW FILTERING 让 cassandra 扫描所有 SSTables 并在缺少分区键时从中获取数据,那么为什么我们不能执行相同的 c 列呢?

0 投票
4 回答
113 浏览

clustering-key - 平均能量测量的聚类算法

我有一个数据集,其中包含具有以下属性的数据点:

  • 平均每日能源消耗
  • 日均发电量
  • 能源类型
  • 输入电网的平均每日能量
  • 每日能源费

我是聚类技术的新手。

所以我的问题是哪种聚类算法最适合这种数据形成聚类?

0 投票
1 回答
565 浏览

cassandra - 带有消息收件箱的已读/未读状态的 Cassandra 建模,CQL

我正在尝试为消息框应用程序找到最佳数据模型。该消息按照首先出现“未读”的顺序出现,然后随着用户滚动“已读”消息将出现。在这两个类别中,我想按到达时间对消息进行排序。类似于 gmail 中的优先收件箱。

我想使用的第一个模式是:

所以我的数据首先按布尔字段排序,然后按时间排序。现在我可以轻松地先查看我的“未读”消息,然后在它们全部结束后,我将开始阅读“已读”消息。

问题是我无法更新任何消息状态,因为它是主键的一部分。我可以做一个删除然后插入一个批处理操作,它也是同一行。

另一个解决方案是:

每个状态都有一行。我获得了非常容易的访问权限,但这是否意味着我必须处理交易?阅读消息时,我必须将其从“未读”行中删除并将其插入“已读”行,它们可能位于不同的分区中。

分区键的另一个版本可以是:

然后我会在 isRead 上添加一个二级索引。我的查询将始终针对某个用户而不是一组用户。

关于什么更好的任何想法?还是有其他建模想法?

0 投票
2 回答
123 浏览

cluster-analysis - 哪种聚类算法适合对地理位置进行聚类?

我正在开发一个与 Tinder 类似的应用程序。我猜 Tinder 通过运行聚类算法对最接近的结果进行分组。在我的应用程序中,必须根据地理位置对数据进行类似的分组。我可能必须根据许多输入运行聚类,所以它必须是高效的。请为它建议合适的算法。

0 投票
0 回答
94 浏览

ns2 - 使用ns2的加权聚类算法?

我曾尝试为 ad hoc 实施 WCA,但我只能建立一个 ad hoc 网络并且无法集群。所以请帮我解决这个问题。

0 投票
1 回答
97 浏览

pagination - Cassandra CQL3 集群顺序和分页

我正在使用 Cassandra 构建用户收藏夹服务。我希望能够将收藏夹按最新排序,然后能够对 track_ids 进行分页,即前端发回 200 页中的最后一个 track_id。

我尝试了主键和集群键的不同组合,但无济于事。我想知道是否最好将其拆分到多个表中。

0 投票
1 回答
420 浏览

sql-server - 在已经是集群键的一部分的非聚集索引中包含“包含”列有什么影响?

RetailerID, PurchaseDate, UserID假设我在 ( )上聚集一个表。这就是“聚集键”,聚集键总是包含在所有非聚集索引中。 https://stackoverflow.com/a/23057196/88409 https://stackoverflow.com/a/2747869/88409

接下来,我创建了一个以 ( ) 为键的非聚集索引“StorePurchasesIndex” RetailerID, StoreID, PurchaseDate,以使仅包含特定商店子集的查找速度更快。

第一个问题是,我是否需要显式包含UserID作为包含列,或者它是否会由于包含它的集群键而隐含地存在?我很确定在这种情况下我不需要UserID明确包含,但如果我错了,请纠正我。

我真正感兴趣的是,如果我明确地将其包含UserID为包含列会发生什么。它是否会冗余地包含在索引中,一次作为集群键的一部分,然后再次作为包含的列?或者 SQL Server 是否识别意图并避免将其存储两次,因为它已经通过集群键包含在内?

第二个问题是,如果不包含冗余,那么明确包含它是否有好处。例如,它UserID是否会确保将来包含在内,即使集群键以排除的方式发生变化UserID并重建索引?