【问题标题】:What are the tradeoffs of choosing DB when working against json structure在处理 json 结构时选择 DB 的权衡是什么
【发布时间】:2023-01-15 09:42:00
【问题描述】:

我的目的是构建 api json 验证器,它将根据预定义的 json 模式验证大量请求。

基本上可以将模式预处理为关系数据库,这取决于我的选择,我们希望获得最佳性能。

json 模式是动态的,可能会从一个 api 更改为另一个: 其中一种模式的示例:

 {
    "key": "key",
    "method": "POST",
    "query_params": [
    {
            "name": "query_params_field1",
            "types": ["String"],
            "required": true
        },
        {
            "name": "query_params_field2",
            "types": ["String"],
            "required": true
        }],
    "headers": [{
            "name": "header_field1",
            "types": ["String", "Long" ], //....
            "required": false
        },
        {
            "name": "header_field2",
            "types": ["String"],
            "required": true
        }], // ....
     "body": [
        {
            "name": "email",
            "types": ["String", "Email" ], // ....
            "required": true
        },
        {
            "name": "arr",
            "types": ["Array"],
            "required": true
        } ...
    ]
}

// example of API request fits to will schema

 {
        "key": "key",
        "method": "POST",
        "query_params": [],
        "headers": [
            {
                "name": "header_field1",
                "value": "xxxxxxxxxxx"
            } ...
        ],
        "body": [
            {
                "name": "email",
                "value": "myemail@email.com"
            },
            {
                "name": "arr",
                "value": [
                    {
                        "city": "nyc",
                        "street": "my street"
                    },
                    {
                        "city": "paris",
                        "street": "abcd"
                    } ...
                ]
            }
        ]
    }

我们可以看到这个请求没有通过验证,因为它在 query_params 中缺少字段, 如果类型不适合,它也可能会失败。

基本上我已经通过代码实现了它并且它可以工作,但是现在请求的规模变得巨大〜(5K /秒)并且模式的数量也增加了,所以我正在考虑使用一些数据库来存储这种模式并以最佳性能对数据库进行验证。 假设数组中的类型数量可能会发生变化并变得更大

我的问题是更多的架构和一般选择哪个数据库?

我在考虑 2 使用 mongo,因为它是本机文档/json 或像 Cassandra 这样的“列 DB”,但它需要做一些预处理并在按列之前扁平化模式,所以我会有很多重复数据。

我知道有一些权衡,比如存储/缩放等。

我想了解他们并据此决定选择哪个数据库或

甚至可能是另一种解决方案,如内存中(键值)?

【问题讨论】:

    标签: mongodb caching database-design cassandra architecture


    【解决方案1】:

    我相信在这里也可以考虑使用 MongoDB 来满足您的需求。我可能有偏见,但众所周知,Cassandra 在高吞吐量和规模下的出色性能并不陌生,您可能想探索 Cassandra 上的Schemaless Document API capabilities that is facilitated by Stargate APIs,同时保留速度、规模、吞吐量和ETC。,

    您可以在 DataStax Astra DB 上的完全托管 DBaaS 中快速对此进行原型设计,whicf 提供了一个每月更新的丰富免费层。 Here 是开发人员入门参考文档。

    好消息是:

    • 您不必预处理数据,您可以完全按原样使用 JSON(又名文档)结构。您可以即时添加/更新 JSON 层模式,而不必担心底层架构。
    • 您不必管理任何架构,因为 Stargate 层会在幕后为您管理。
    • 您不必担心存储或扩展,因为 Astra DB 是一种无服务器 DBaaS,它提供真正基于消费的模型,并且可以独立扩展您的吞吐量或存储以满足您的应用程序工作负载。
    • 这不是项目宣传,但利用 Astra DB 的其他好处是它具有其他 schema-based APIs such as gRPC, GraphQL, REST 并且还与 a streatming & messaging layer via Astra Streaming, powered by Apache Pulsar®Real-Time AI 功能紧密集成,以帮助满足您组织的未来需求.

    让我们知道您的探索进展如何!

    【讨论】:

      猜你喜欢
      • 2015-10-02
      • 2023-03-20
      • 2016-03-26
      • 2020-11-27
      • 2014-08-05
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      相关资源
      最近更新 更多