如何在 Couchbase 中创建索引以便枚举所有键?

问题描述 投票:0回答:1

背景: 我们使用 Couchbase 6.6.6-10576-enterprise 作为键值存储(我们仅存储二进制数据),并且我们正在努力迁移到 Redis(我不会详细说明我们进行此迁移的原因)。 我们的应用程序是用 C# 编写的,我们使用 CouchbaseNetClient NuGet 版本 2.7.27 与 Couchbase 交互。

目标: 在迁移的背景下,我们想要编写一个简单的工具,迭代 Couchbase 实例的所有键,然后将它们写入 Redis(当然只要它们关联的值)。

问题: 根据我的理解,获取所有密钥可以通过这样的查询来完成:

SELECT META().id FROM `my-bucket` WHERE META().id > $key LIMIT 1000

但是当我运行这样的查询时,我收到以下错误消息:

No index available on keyspace my-bucket that matches your query. Use CREATE INDEX or CREATE PRIMARY INDEX to create an index, or check that your expected index is online.

除非我错了,否则可以使用此命令创建索引:

CREATE PRIMARY INDEX `my-bucket-index` IF NOT EXISTS
ON META().id

问题:在生产中创建此类索引会产生什么后果?这是解决我们问题的适当方法吗?

c# redis couchbase
1个回答
0
投票

听说您要离开 Couchbase,我感到很遗憾 :( 如果您最终愿意的话,我想了解更多原因。

话虽这么说:

我通常不会推荐在 Couchbase 上的生产中使用

PRIMARY INDEX
,因为它可以充当后备索引,使 any 查询能够运行,相当于全表扫描(这对大型池的性能不利)数据)。

但是,对于您的情况,您想要检索每个密钥,我认为只要满足以下条件就可以了:

  1. 使用完后就可以删除主索引。
  2. 您的应用程序使用的查询(假设您有一些)已经正确索引。
  3. 您不打算将任何未正确索引的新查询部署到生产中,这些查询可能会无意中使用主索引。

每当弄乱生产中的索引时,我仍然会担心性能。这可能是一种更安全的方法:

A) 在集群中临时添加一个 Analytics 节点,并在其中运行迁移查询。

B) 启动第二个集群,设置 XDCR,并查询第二个集群上的数据。

C) 设置 Kafka 连接器,并处理文档。

这些可能是许可事件,因为您使用的是 Enterprise 🤷u200d♂️。 IANAL,YMMV。

© www.soinside.com 2019 - 2024. All rights reserved.