问题标签 [secondary-indexes]

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 回答
131 浏览

java - 如何在 hbase 协处理器中进行拦截扫描

如何拦截 hbase 中查询的内容?我看到你可以拦截preGetOppreScannerOpen但我不知道看到什么column familiescolumn qualifiers正在被查询。你怎么看?

我愿意编写一个协处理器来拦截查询并在二级索引表中搜索......

0 投票
1 回答
409 浏览

performance - Riak 二级索引 (2i) - 写入性能

在写入 Riak 的对象中包含二级索引 (2i) 对性能有何影响?

让我们考虑两种情况,都在一个存储桶中有大量对象。每个对象都有一个二级索引,我们称之为example_bin(但它也可以是一个整数索引):

  1. 几乎每个值example_bin都是不同的值。对索引的一个特定值的查询只返回一个或几个对象。这样的索引可以是电子邮件地址或注册时间(作为 unix 时间戳)。
  2. example_intindex只有几个可能的值。因此,对特定索引值的查询会返回大量对象。这样的索引可以代表一个用户类别,例如“管理员”或“客户”。

更新这些对象时对性能有何影响?我知道每次更新对象时都需要检查索引。上述任何一个示例都可以构成 Riak 的耗时或耗费资源的任务吗?

0 投票
1 回答
1169 浏览

unique - 具有唯一二级/第三索引的 Dynamodb

我正准备重建一个数据库,该数据库有 3 个不同的表,所有表都包含相同的数据。不同之处在于每个用户 ID、用户名、电子邮件的 HashKey。我正在尝试将它们全部组合到一张表中,因为我认为冗余既不好又慢。我打算做的是将 UserId 作为 HashKey,并将 UserName 和 Email 作为二级索引。我还没有找到让 dynamoDb 在二级索引上强制唯一性的方法,因此计划使用条件写入来检查那些在写入数据库之前的唯一性。使用 SQL 这将非常容易,在 DynamoDb 中是否有更好的方法来做到这一点?我需要能够根据三个 UserId、UserName 和 Email 中的任何一个来查找用户。我想将此保留在一个表中,而不是使用将电子邮件引用到 UserId 或将 UserName 引用到 UserId 的另一个表。

0 投票
2 回答
231 浏览

java - 在客户端验证行比使用整个主键的二级索引更好?

在 cassandra 中,众所周知应该非常谨慎地使用二级索引。

例如,如果我有一张桌子:

这里用户名是分区键。现在我想支持当且仅当 usertype 是特定值 X 时返回特定用户(将给出用户名)的操作。

我有两种方法可以做到:

一:在用户类型上创建二级索引,可能的值('A','B','C')和用户名是分区键。

二:

我可以将带有用户名的行获取到客户端,然后检查用户类型是否为 A。

哪种方法更好?还请考虑一个宽行(不是那么大,10 秒)场景,其中并非分区的所有行都可能具有给定值(这需要一些客户端过滤)。

我不清楚二级索引是如何在特定节点中查找数据。

前任:SELECT * FROM user WHERE username='something' AND usertype='A'

例如 usertype hidden CF 有数据 'A'-> 'jhon', 'miller', 'chris',...等,100 个用户名

并且带有分区键的查询与用户类型一起给出它是扫描所有这 100 个用户名以匹配用户名“某事”,还是它只是先按用户名获取,如果它与“A”匹配,则查看用户类型列?它究竟是如何进行搜索的?给定索引在低基数数据上的查询票价如何,并且每个数据都映射到多行?

如果这很重要,我将使用 java 作为客户端。

更新: 我知道我可以在这个特定的例子中使用集群(用户类型)键,但我想知道我问过的权衡。我原来的表格要复杂得多。

0 投票
1 回答
26529 浏览

amazon-dynamodb - 如何使用 DynamoDBMapper 查询具有仅具有 hashKeys 的 GSI 的 Dynamo DB

我对Dynamo DB很陌生,可能这是一个非常微不足道的问题,但我浏览了 Dynamo DB 的文档和堆栈溢出问题,但我找不到一个链接,它告诉我如何查询 DDB 以获取只有散列键的GSI和没有为相同的指定范围键。

我得到异常 Illegal query expression: No hash key condition is found in the query。

0 投票
1 回答
814 浏览

indexing - 如何在 DynamoDB 中实现可扩展的无序集合?

我正在研究在 Amazon DynamoDB 之上实现可扩展的无序对象集合。到目前为止,已经考虑了以下选项:

  1. 使用 DynamoDB 文档数据类型(地图、列表)并使用文档路径来访问独立项目。这对于收集限制为 400KB 的数据有一个明显的缺点,这意味着可能有 1..10K 个对象,具体取决于它们的大小。不太明显的缺点是将新对象插入此类集合的成本将是巨大的:亚马逊指定将根据总项目大小扣除写入容量,而不仅仅是新添加的对象 - 因此约 400 个容量单位接近大小限制时插入 1KB 对象。那么考虑到这一点排除了吗?

  2. 使用复合主散列 + 范围键,其中主散列对于集合中的所有对象保持相同,范围键只是随机或原子计数器。明显的缺点是具有相同的哈希键会导致错误的键分布——当有大量对象的集合时基数很低。这意味着分区错误,并且存在规模问题,同一集合上的所有读/写都卡在一个分片上,受到 DynamoDB 分区每秒 3000 次读取/1000 次写入的限制。

  3. 使用带有二级哈希 + 范围键的全局二级索引,其中哈希键对于属于同一集合的所有对象保持相同,而范围键只是随机的或原子计数器。与上面类似,GSI 的分区变得很差,并且它将成为一个瓶颈,因为太多相同的哈希值会迅速耗尽所有预置容量到索引。我没有找到 GSI 是如何准确实现的,因此不确定它受低基数的影响有多严重。

问题是,我是否可以忍受 (2) 或 (3) 并遭受不理想的密钥分配,或者是否有另一种实现被忽视的集合的方式,或者我应该考虑研究另一个 nosql 数据库引擎。

0 投票
1 回答
469 浏览

cassandra - cassandra 按二级索引搜索一行返回 null

我创建了一个表和索引如下

在我插入或删除数百万次数据后。我发现当我使用后续查询时无法返回任何数据。实际上,数据中有这一行。

当我通过 PRIMARY KEY 查询时

它返回数据:

但是当我通过二级索引查询时,它返回null。

谢谢

0 投票
1 回答
720 浏览

database - Apache Phoenix 二级索引的工作原理

二级索引如何与 Phoenix 配合使用。我有一个 HBASE 数据库设置,它是通过直接插入 HBASE 而不是通过 Phoenix 插入查询来更新的。但是所有的选择都将通过 Phoenix 选择查询来完成。Phoenix 二级索引在这些选择查询中仍然有效吗?

0 投票
1 回答
7295 浏览

c#-4.0 - 使用全局二级索引的 .net queryAsync 方法的 AWS sdk 失败

下面给出的是我用来从 Dynamodb 表中检索详细信息的方法。但是当我调用这个方法时,它最终抛出了一个异常“无法找到关键属性约会 ID 的属性”。这个特定表的主键是约会ID,但我已经在 PatientId 列上创建了一个全局二级索引。我在下面的查询中使用该索引来通过给定的患者 ID 获取预约详细信息。

0 投票
2 回答
184 浏览

amazon-dynamodb - DynamoDB Xcode6 Swift 使用三列作为键

我正在尝试使用 DynamoDB 表来存储这些数据:

DartsPlayerInsultTable

使用此处描述的方法(概念,而不是代码):

这里:

和这里:

我希望每个客户玩家有多个侮辱记录。CustomerId 是我的哈希键 PlayerId 是我的范围键,我试图在键中使用 PlayerInsult,以便第二个 PlayerInsult 值插入第二条记录,而不是替换现有的记录。

为此尝试了全局索引和二级索引,但如果我尝试添加新的侮辱行,它仍然会用相同的客户-玩家密钥替换侮辱,而不是添加新的。

DynanoDB 对此的最佳使用方法有什么建议吗?我是否需要为范围键创建混合列?试图保持这个简单...