使用 Amazon 上的托管数据库选项查询集合属性

Query against collection attribute using a managed database option on Amazon

我想通过一组字符串值的字段在 O(log N) 时间内查询一些对象。

被索引的示例对象:

Restaurant: {
     name: 'Bobs Burgers'
     menu: ['hamburger', 'hotdog', 'lasagna']
}

示例伪查询:

SELECT * FROM restaurants WHERE menu='hamburger'
( or perhaps: 'hamburger' in menu )

很久以前我使用 Google App Engine,他们允许我在他们的 NoSql 数据库 Big Table.

上执行此操作

但是我知道亚马逊的 DynamoDB 不允许我这样做。我明白,如果我要将 DynamoDB 用于此类查询,我将需要使用代码来维护自己的二次查找 table(显然我不想这样做)。我的这个假设是否正确?或者是否有一种干净的技术用于使用具有 DynamoDB 限制的数据库在 O(log N) 时间内查询此类数据(即 sets/collections 不能在索引中使用)

或者我应该为此类用例使用不同的技术吗?例如 Amazon RDS - 它提供以下类型的数据库:

AWS DocumentDB 执行此操作。 MongoDB 兼容。

您所指的索引类型在 MongoDB 中称为“Multikey”:

"https://docs.mongodb.com/manual/core/index-multikey/"

这里使用的是 schemafreesql 在节目中看到他们的 post 黑客向任何 SQL 数据库添加了一个 nosql 层。以下是他们网站的修改示例。

[
    {
        "modify": {
            "data": {
                "Restaurant": [
                    {
                        "name": "Bobs Burgers",
                        "menu": [
                            "hamburger",
                            "hotdog",
                            "lasagna"
                        ]
                    },
                    {
                        "name": "Sallys Burgers",
                        "menu": [
                            "eggs",
                            "french toast",
                            "danish"
                        ]
                    },
                    {
                        "name": "Johns Burgers",
                        "menu": [
                            "grilled cheese",
                            "hamburger",
                            "patty melt"
                        ]
                    }
                ]
            },
            "_comment": "Create Restaurants"
        }
    },
    {
        "query": {
            "sfsql": "SELECT $s:Restaurant.name as 'Restaurant',  $s:Restaurant.menu as 'menu' where $s:Restaurant.menu='hamburger'",
            "_comment": "Query Restaurant by menu"
        }
    }
    
]