Azure表存储实体中的阵列(非字节)

Azure表存储实体中的阵列(非字节),azure,azure-storage,azure-table-storage,Azure,Azure Storage,Azure Table Storage,我希望在Azure表实体中存储阵列。目前,本机支持的唯一数组类型是字节数组,长度限制为64k。大小足够了,但我想在实体中存储long、double和timestamp数组 很明显,我自己可以将多个字节强制转换为请求的类型,但我想知道是否有实现这一点的最佳实践 澄清一下,这些是与单个键关联的固定长度数组(例如1000个单元格)。除了您刚才提到的方法之外,我一直在想一种很好的方法来实现这一点,但我不知所措。我能想到的最简单的解决方案是将数组进行二进制序列化并存储在二进制数组属性中 我提出了其他选择,

我希望在Azure表实体中存储阵列。目前,本机支持的唯一数组类型是字节数组,长度限制为64k。大小足够了,但我想在实体中存储long、double和timestamp数组

很明显,我自己可以将多个字节强制转换为请求的类型,但我想知道是否有实现这一点的最佳实践


澄清一下,这些是与单个键关联的固定长度数组(例如1000个单元格)。

除了您刚才提到的方法之外,我一直在想一种很好的方法来实现这一点,但我不知所措。我能想到的最简单的解决方案是将数组进行二进制序列化并存储在二进制数组属性中

我提出了其他选择,但没有考虑:

  • 如果本机存储很重要,您可以将此信息保存在另一个子表中(我知道Azure表在技术上没有关系,但这并不意味着您不能表示这种类型的内容)。这样做的缺点是它会比你原来的速度慢很多
  • 获取数组,XML序列化它并将其存储在字符串属性中。这意味着您可以在使用第三方data explorer工具时查看阵列的内容,并且可以运行(效率低下的)查询来查找阵列内容的精确匹配
  • 用于存储数据。这实质上是将整个对象进行二进制序列化,并在表实体的属性中将结果拆分为64kb的块。这确实解决了您遇到的问题,但您只能使用支持此框架的工具访问数据

  • 如果您只有一个键值集合要存储,那么您还可以查看Azure BLOBs。它们可以相当有效地存储每个blob最多2500万个时间值点的数组(在数据集中随机访问)。

    如果您选择将对象存储在blob存储中,并且需要多个“键”才能获取它,您只需创建一个azure表或两个或n,在其中存储要查找的键和对确切blob项的引用。

    为什么不将值存储为csv字符串?

    我编写了一个azure表存储客户端,名为Lucifure Stash,它支持数组、枚举、大数据、序列化、,公共和私人财产和领域等


    您可以在

    上获得它。您可以使用.NET JavaScript序列化程序将数组序列化为JSON字符串:


    这个类有一个“MaxJsonLength”属性,您可以使用它来确保数组在序列化时不超过64K。您可以使用同一个类来反序列化存储的对象。

    或者您可以从Lokad.Cloud获取代码,并根据需要重用它。我希望在编译列表时考虑到这一点,我想我可能是被表卡住了。可以序列化(二进制/XML,无所谓)并按键存储整个对象。最大的缺点是没有很好的工具支持管理大量BLOB,并且您仅限于使用键进行查询。您可以使用成对的表行来补充数据。大小限制。请看,这也是一个很好的选择,需要做更多的工作,但在保持总体成本较低的情况下提供了更多的灵活性。链接引入了一个错误的站点,也许这是正确的url?