咨询json类型的使用限制

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】OB
【 使用版本 】4.4.2-ce
【问题描述】有一些json的相关问题。

  1. json类型的内容受到1.5M限制么?
  2. json的内部的字段个数有限制么?同一层的字段个是有限制么?
  3. json深度有限制么?
  4. 有一个类似kv的使用场景,只进行set和get,只是值比较大1.5M-16M之间,这个可以使用长对象类型么?

@论坛小助手

2 个赞

@论坛小助手

JSON类型使用限制的解答

根据您提供的信息,您正在使用的OceanBase版本为4.4.2-ce,并且您的问题涉及JSON数据类型的多个使用限制。以下是针对您提出的问题的详细回答:

  1. JSON数据长度限制

    • 根据文档片段1和2中的信息,JSON数据的最大长度不能超过LONGTEXT的长度。在MySQL模式下,LONGTEXT的最大长度是4GB。因此,JSON类型的内容不会受到1.5M的限制。但是,考虑到实际应用中存储和处理大对象的性能因素,建议尽量避免存储过大的JSON数据。
  2. JSON内部字段个数限制

    • 关于JSON内部的字段个数,无论是同一层还是整个JSON结构内,并没有直接提及具体的数量限制。但需注意的是,随着字段数量的增加,特别是在单一层级中拥有大量字段时,可能会导致查询性能下降。因此,在设计时应考虑合理的字段数量以保持良好的性能。
  3. JSON深度限制

    • 对于JSON数据结构的最大嵌套深度(即“深度”),确实存在一个明确的配置项叫做json_document_max_depth。从文档片段7可以看出,默认值为100,取值范围在[100, 1024]之间。这意味着默认情况下,每个JSON对象或数组的最大深度为99层。可以通过执行ALTER SYSTEM SET json_document_max_depth = X;来调整此参数,其中X为您希望设置的具体数值。

    配置示例如下:

    obclient> ALTER SYSTEM SET json_document_max_depth=100;
    
  4. 对于大对象(LOB)类型的适用性

    • 如果您的应用场景主要涉及到存储较大文件(如1.5MB至16MB之间),并且主要操作是简单的读写,则可以考虑使用BLOB或CLOB等长对象类型而不是JSON类型。这些类型专门用于处理大容量二进制或字符数据,可能更适合您的需求。不过,请注意检查OB版本对这些类型的支持情况以及相关性能影响。

综上所述,虽然JSON类型非常适合存储结构化数据,但对于特别大的数据对象,使用BLOB/CLOB或许更为合适。请根据具体业务场景选择最适合的数据类型。如果您还有其他方面的疑问或者需要进一步的帮助,请随时告知!

参考文档:

详情请参考:

  1. JSON 数据类型
  2. 创建 JSON 值
  3. json_document_max_depth
  4. 列 Skip Index 属性
  5. 配置项总览
2 个赞

感谢分享

学习下