Azure表存储实体中的数组(非字节)

时间:2010-11-30 19:18:34

标签: azure azure-storage azure-table-storage

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

我显然可以自己将多个字节转换为请求的类型,但我想知道是否有任何最佳实践来实现这一点。

为了澄清,这些是与单个密钥相关联的固定长度数组(例如1000个单元)。

6 个答案:

答案 0 :(得分:4)

我编写了一个名为Lucifure Stash的Azure表存储客户端,它支持数组,枚举,大数据,序列化,公共和私有属性以及字段等。

您可以在http://www.lucifure.com或从NuGet获取。

答案 1 :(得分:3)

除了你已经提到过的方法之外,我一直试图想出一个很好的方法来做到这一点,我很茫然。我能提出的最简单的解决方案是获取数组,二进制序列化它并存储在二进制数组属性中。

我提出的其他选择但被驳回:

  1. 如果以原生方式存储它很重要,您可以将此信息保存在另一个子表中(我知道Azure表在技术上没有关系,但这并不意味着您不能代表这种类型的事物)。这样做的缺点是它会比原来慢得多。
  2. 获取数组,XML将其序列化并将其存储在字符串属性中。这意味着您在使用第三方数据资源管理器工具时可以看到数组的内容,并且您可以运行(低效)查询来查找数组内容的完全匹配。
  3. 使用Lokad Cloud fat entities存储您的数据。这基本上将您视为整个对象,二进制序列化它并将结果拆分为表实体属性的64kb块。这确实解决了您遇到的问题,但您只能使用支持此框架的工具来访问您的数据。

答案 2 :(得分:3)

如果您只有要存储的键值集合,那么您还可以签出Azure BLOB 。他们可以更有效地存储每个blob最多25M时间值点的数组(在数据集中随机访问)。

答案 3 :(得分:2)

如果您选择将对象存储在blob存储中并需要多个“密钥”来获取它,您可以创建一个或两个或者n的表来存储要查找的密钥和引用确切的blob项目。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

您可以使用.NET JavaScript序列化程序将数组序列化为JSON字符串: http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

此类具有“MaxJsonLength”属性,可用于确保阵列在序列化时不超过64K。并且您可以使用同一个类来反序列化您存储的对象。