Select Aerospike 查询语言中的一组随机 bin?

Select random bin from a set in Aerospike Query Language?

我想 select 从命名空间中的一组随机 'n' 垃圾箱样本。有没有办法在 Aerospike 查询语言中实现这一点?

在 Oracle 中,我们通过以下查询实现类似的功能:

SELECT * FROM <table-name> sample block(10) where rownum < 101 

上述查询从 100 个样本中提取大小为 10 行的块。

我们也可以在 Aerospike 中做类似的事情吗?

AQL 是使用 Aerospike C Client 编写的工具。 Aerospike 没有服务器可以理解的 SQL 类查询语言 本身 。 AQL 提供的任何功能都已记录在案 - 在 aql> 提示符下键入 HELP。

您可以用 C 或 Java 编写应用程序来实现此目的。例如,在 Java 中,您可以使用 ScanPolicy 中定义的 maxRecords 调用 scanAll() API。我没有看到 AQL 工具提供该扫描选项。 (它只允许您指定扫描速率,这是其他 ScanPolicy 选项之一。)

行就像 Aerospike 中的记录,列就像箱子。您没有办法从 table 中随机抽取列,对吗?

您可以使用添加到该集合扫描的 ScanPolicy.maxRecords 从集合中随机采样 记录 。请注意,Aerospike 5.6 版中的新(可选)set indexes 可能会加速该操作。

每个namespace的data partitioned分为4096个逻辑分区,namespace中的记录平均分配给每个使用20字节RIPEMD特性的分区-160 摘要。因此,Aerospike 没有 rownum,但您可以利用数据分布来采样数据。

每个分区大约是名称的 0.0244%space。这是您可以使用的示例 space,类似于上面的 SQL 查询。接下来,如果您愿意,可以使用 ScanParition method of the client, you can give it the ScanPolicy.maxRecords to pick a specific number of records out of that partition. Further you can start after an arbitrary digest (see PartitionFilter.after)。

好了,现在说说数据浏览。除了使用 aql 工具,您还可以使用 Aerospike JDBC driver, which works with any JDBC compatible data browser like DBeaver, SQuirreL, and Tableau. When you use LIMIT on a SELECT 语句,它基本上会执行我上面描述的操作 - 使用分区扫描和该扫描的最大记录样本。我建议你试试这个作为替代方案。