用java在天蓝色表存储中存储复杂数据类型的正确方法是啥?

Posted

技术标签:

【中文标题】用java在天蓝色表存储中存储复杂数据类型的正确方法是啥?【英文标题】:What is the correct way to store complex data types in azure table storage with java?用java在天蓝色表存储中存储复杂数据类型的正确方法是什么? 【发布时间】:2021-12-29 23:19:13 【问题描述】:

我已经对此进行了一段时间的研究,但我没有找到明确的答案。我想使用 azure 表存储而不是 cosmosdb。原因是为了我的需要,我只需要键值查找并且表存储要便宜得多。但是我想将复杂的数据存储在表存储中。也就是说,我想要保留的每个项目都可以有几个其他对象和几个列表。我尝试了几个小时使用 azure 文档和谷歌搜索的博客/教程来让它工作。我最终发现似乎与自身冲突的信息有些人说有可能,有些人说不可能。我觉得这不应该是一场辩论我也觉得你应该能够做到。是否有将复杂数据类型存储在 azure 表存储中的最佳实践方法?或者我应该只使用 ObjectMapper 并将我想要持久化的复杂数据字符串化然后持久化它?

【问题讨论】:

我没有亲自使用过它,但听起来它应该根据我看到的文档工作。如果你直接持久化一个 JSON,那么我不确定你是否能够直接查询它,但你可以试试。 是的......我认为一种方法会起作用,但不确定它是否是最好的方法,这就是我问这个问题的原因。将查询所需的属性保存在它们各自的列中,行的属性,然后将其他所有内容作为 JSON 字符串保存为它自己的列......这会起作用。只是感觉很尴尬,我不确定这是否是正确的做法。 【参考方案1】:

您在评论中描述的方法是正确的方法。 Azure 表存储是Key/Value Pair 类型的存储,不支持按原样存储 JSON 文档。

一种方法是序列化 JSON 文档并将整个文档存储为字符串。请注意,在这种情况下,您将无法查询 JSON 文档属性。

其他方法是将 JSON 文档展平,然后将每个属性存储为键/值对。例如,如果您的文档看起来像这样:


  "firstName": "",
  "lastName": "",
  "address": 
    "streetAddress": "",
    "city": "",
    "state": "",
    "zip": ""
  

你可以像下面这样展平它:

firstName: ""
lastName: ""
address_streetAddress: ""
address_city: ""
address_state: ""
address_zip: ""

并将其存储在您的表中。

【讨论】:

好的,谢谢...虽然我觉得很尴尬,但我认为 objectmapper 会比上面提到的方法更好。我也是这么想的,但是好像更尴尬了。无论如何,它还需要对对象映射器自动处理的数据进行重组。谢谢你的回答。

以上是关于用java在天蓝色表存储中存储复杂数据类型的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Java中存储金额用啥数据类型

c数据结构 -- 线性表之 复杂的链式存储结构

VB调用SQL存储过程异步执行问题

Leetcode题解——数据结构之哈希表

数据结构单向链表及其Java代码实现

线性表