问题标签 [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 投票
0 回答
158 浏览

rethinkdb - 在 rethink DB 中创建复合索引

我在重新思考数据库中进行查询,

numbercreatedAt是两个二级索引。这样做会产生错误,因为我们不允许在单个查询中使用多个二级索引。我尝试使用此链接创建复合索引,但它与我的问题不同。提前致谢。

0 投票
2 回答
72 浏览

indexing - 如何从表中为每个 userId 选择元素

我在 cassandra 中创建了表用户

我插入数据:

pcid | 用户名 | 朋友 | 分数 | 年龄 | 姓名

我的问题是:如何为每个用户 ID 选择 2 个按名称排序的朋友(朋友 ID、年龄、姓名、分数)?

我的结果应该是:

pcid | 用户名 | 朋友 | 分数 | 年龄 | 姓名

0 投票
0 回答
472 浏览

cassandra - Cassandra:高 CPU 使用率和无响应的数据库,可能是由于二级索引构建卡住 - 如何停止索引构建过程?

在运行 Debian 的 VM 上单节点安装 Cassandra 3.7 时,我有一个包含大约 2000 万行的表。为了能够选择最近几天插入的数据,我使用 Datastax DevCenter 1.6.0 执行语句,在包含插入日期的列上创建二级索引:

语句本身运行得很快,然后,据我了解,索引创建过程在后台开始,其中一个内核的 CPU 负载接近 100%。问题是,这个 CPU 负载现在已经超过 24 小时,并且即使在虚拟机多次重新启动后再次启动

为了检查索引创建过程,我运行了

但几乎从一开始它似乎就停留在 5.78% 并且在过去 24 小时内根本没有改变:

我可以从表中选择但不能插入数据,甚至不能进入其他表,然后我得到

如果我尝试删除索引,

我明白了

我试图使用停止索引构建

但这没有任何区别。

我该怎么做才能停止并重新启动索引创建?还是有其他一些我没有想到的东西在运行?

2017-01-12 更新

我从来没有停止索引创建过程,所以我最终从创建索引之前的备份中恢复了虚拟服务器。

我还发现了 Cassandra 3.4 中引入的新 SASI 索引(http://www.doanduyhai.com/blog/?p=2058),特别是 SPARSE 索引模式用于存储接近唯一的数据,例如毫秒时间戳。事实上,最多允许 5 个相同的值。所以我使用创建了一个 SASI 索引

创建花了大约 20 分钟,似乎工作正常,现在我可以进行如下查询

0 投票
2 回答
1613 浏览

insert - 在将项目放入表之前,Dynamodb 会考虑二级索引也是主键。?

我将表命名为message_tbldynamodb用于消息传递系统。

为了获取与特定conversation_id相关的所有消息项,我设计了这样的表:

属性是:

主哈希键=>conversation_id

主排序键=>date_time

其他属性=> sender_id,message

conversation_id date_time sender_id message 123456 2016-12-27 06:00:39 pm 10 hai how are you..? 123456 2016-12-27 06:01:00 pm 11 I am fine 123456 2016-12-27 06:01:12 pm 10 ok 123456 2016-12-27 06:01:12 pm 14 Hai man. How are you.?

由 => 10 和 14 同时发送的最后两个条目sender_id可能有机会发生。?如果发生这种情况,将用相同的主键替换属性值,并且会发生数据丢失。我应该使用一个唯一的随机 6 位字符串作为辅助本地索引吗?我可以从中逃脱..?

如果我将二级索引设置为排序键(唯一随机字符串) ,则将项目放入具有相同会话 ID 和日期时间的数据库可以接受。?如果我做错了,请让我设计桌子。

注意:我使用的是 PHP Codeigniter MVC 框架。

0 投票
1 回答
81 浏览

aerospike - 迁移后二级索引缺失记录(添加/删除节点)

我注意到,每当我从集群中添加/删除节点时,即使在迁移完成后,二级索引查询也会为某些记录返回空结果。但是可以使用 PK 成功检索它们。我正在使用带有 RAM+HDD 模型的 3.8.1 版本。目前我每次都必须手动删除和创建每个二级索引。有更好的解决方案吗?

0 投票
1 回答
455 浏览

multiple-columns - 如何在 tarantool 中创建可根据多个条件搜索的空间

我们的用例如下

我们将从来源获取文章。
每篇文章都有一定的元数据。元数据有一个字段类别,它是文章可能属于的类别名称(手机、笔记本电脑等)的列表。类似地,元数据有一个关键字字段,其中包含文章可能属于的关键字列表.

以下是我们可能需要的查询

a)获取给定类别的所有文章,并且来自某个来源,位置。来源和位置是文章的元数据字段。
b) 获取给定类别、来源、位置的所有文章。c) 获取给定类别、位置的所有文章。
d) 获取给定关键字、类别、位置的所有文章。

下面是我们如何设计空间。因此,在获取每篇文章后,我们将文章插入文章空间,并根据该文章所属的类别和关键字插入到 category_articles 和 keyword_articles 空间。

以下是我对如何有效地为给定查询模式创建二级索引的几个查询。

a) 对于二级键 {category,source,location},如果我们错过了输入值中的某些部分,那么如果 key 的其他部分相等,行会匹配吗?https://tarantool.org/doc/singlehtml.html#lua-data.index_object.parts
我知道我们不能在输入中指定第一和第三部分,即{'category','location'}作为键?或者我们在第二个位置有一个零。

b)我们能否以更好的方式对模式进行建模,以便有效地查询给定的模式。

文章

urlhash
标题
内容
url
日期

主键:{urlhash}

--
category_articles

id
类别

位置
{urlhash,..}

主键:{id}
辅助键:{类别、来源、位置}

--keyword_articles _

id
关键字
类别

位置
{urlhash,..}

主键:{id}
辅助键:{关键字、类别、来源、位置}

更新:
查询:
box.space.category_articles.index.secondary_key:select{'bollywood',nil,'india'}
输出:

[1, '宝莱坞', 'ht', '印度', ['url1', 'url2']]
[3, '宝莱坞', 'ht', '我们', ['url3', 'url4']]

0 投票
1 回答
152 浏览

rethinkdb - RethinkDB 在嵌套字段上的多索引

我有一张包含此文档的表格:

我想检索具有特定autoroles.users(例如149505704569339904)的文档。所以,我创建了这个多索引:

现在,我尝试获取文档:

但是这个查询什么也不返回。

我不明白我做错了什么,因为autoroles.users它是一个数组,这是多索引应该处理的。

感谢您的回复:)

0 投票
2 回答
35 浏览

distributed-computing - Why can't direct routing be used for distributed data with a secondary index?

I'm reading the following article: Elements of Scale: Composing and Scaling Data platforms

I'm stuck on understanding the following sentences:

A secondary index is an index that isn’t on the primary key. This means the data will not be partitioned by the values in the index. Directed routing via a hash function is no longer an option. We have to broadcast requests to all machines.

Can anyone explain why this is the case? I am a beginner to data platforms but have gotten so far and understand the article.

Specifically, why can't we look up values in the secondary index for their primary key, then look up their location via a hash function on that primary key? Why broadcast requests to all machines?

Thank you for your time

0 投票
2 回答
66 浏览

domain-driven-design - 有哪些策略可以在键/值数据库中查找无法访问的键?

TL;博士

如何在具有大量数据的键/值存储中找到“无法访问的键”?

背景

与提供 ACID 保证的关系数据库相比,NoSQL 键/值数据库为处理“大数据”提供的保证较少。例如,它们仅在单个键/值对的上下文中提供原子性,但它们使用分布式哈希表等技术在任意大型机器集群中“分片”数据。

钥匙通常对人类不友好。例如,代表员工的数据块的键可能是 Employee:39045e87-6c00-47a4-a683-7aba4354c44a. 员工可能还具有更人性化的标识符,例如jdoe员工登录系统时使用的用户名。此用户名将存储为单独的键/值对,其中键可能是EmployeeUsername:jdoe. key 的值EmployeeUsername:jdoe通常是包含主键的字符串数组(将其视为二级索引,不一定包含唯一值)或员工 blob 的非规范化版本(可能从其他对象聚合数据以改进查询性能)。

问题

现在,鉴于键/值数据库通常不提供事务保证,当进程插入键 Employee:39045e87-6c00-47a4-a683-7aba4354c44a(以及员工的序列化表示)但在插入 EmployeeUsername:jdoe键之前崩溃时会发生什么?客户不知道员工数据的密钥——他或她只知道用户名jdoe——那么如何找到 Employee:39045e87-6c00-47a4-a683-7aba4354c44a密钥?

我唯一能想到的是枚举键/值存储中的键,一旦找到合适的键,“恢复”索引/非规范化。我非常了解诸如事件溯源之类的技术,其中幂等事件处理程序可以响应事件(例如,EmployeeRegistered)以重新创建用户名到员工 uuid 二级索引,但仍然使用键/值存储上的事件溯源需要枚举键,这可能会降低性能。

比喻

我在 IT 方面的经验越多,我就越能看到在不同场景中解决相同的问题。例如,Linux 文件系统将文件和目录内容都存储在“inode”中。您可以将它们视为键/值对,其中键是整数,值是文件/目录内容。写入新文件时,系统会创建一个 inode 并用数据填充它然后修改父目录以添加“filename-to-inode”映射。如果系统在创建文件之后但在父目录中引用它之前崩溃,则您的文件“存在于磁盘上”但本质上是不可读的。当系统重新上线时,希望它会将此文件放入“lost+found”目录中(我想它是通过扫描整个磁盘来实现的)。

编辑

我发现这篇关于手动二级索引的有趣文章,但它没有“损坏”或“过时”二级索引。

0 投票
1 回答
141 浏览

indexing - 构建具有许多可搜索属性的大型 DynamoDB 表?

我一直在努力寻找构建表格的最佳方式。它打算拥有很多很多 GB 的数据(我没有得到更详细的估计)。该表将是声明数据(此处为示例),其中分区键为 resourceType,排序键为 id(尽管这些可能会更改)。最终用户应该能够通过多个属性(机构、提供商、收款人等,总计约 15 个)进行搜索。

我一直在尝试组合全局和本地索引,以便在后端实现此功能。构造表格以允许用户根据这些属性中的一个或多个基本上以任意组合搜索数据的最佳方法是什么?