所以,比如我有集文档的是这样的:DocumentDB:如何更好地构建数据更新
{
hotField1 : 0,
hotField2 : "",
coldField1 : 0,
...
coldFieldN : ""
}
在此范围内的低温性能都写一次,访问有时,热性能相当写,然后经常访问\更新(但在不同的使用情况下,它不是相同的子文档或同一对象的部分)。 文档数量相当大(1M以上),热数据的大小至少比冷数小十倍。
由于部分更新仍然最想做但没有实现的功能,只更新hotField1方法是:
- 索取完整的文档
- 更改或者hotField1或hotField2
- 写回整个文档
这对于RU而言是昂贵的,并且不能很好地扩展。
所以问题是如何在DocumentDB中调用这些数据调用&以最小化成本?
发现的替代品:
显然最好的:获取一个属性;更改;更新- 尚未。- 在两个集合上分开使用存储过程从主集合中检索然后从Dictionary中检索?
- 把hotFields1-2作为子文档
({ sub: {hf1:0, hf2:""}})
并以某种方式只更新它? (我不确定是否可能)
PS。 C#中的标签用于我们使用的客户端库。如果它缺乏可以使用REST接口的话。
#3今天也不可能。我的第一个建议是使用直接的一体化文档方法进行构建并对其进行基准测试。如果不符合规定,则使用分区集合调整已分配的吞吐量参数,否则请转至较高的S级别。如果这还不够,那么考虑一个更复杂的分区设计,根据该领域的“热”程度进行分区。根据我的经验,工程师对什么是快速的和什么不会脱离现实的假设。你需要试验。 –
@LarryMaccherone,我们已经有关于RDBMS的工作系统,所以我们已经收集了一些数量的统计数据。你能详细说明一下,更复杂的设计是什么意思? – Sanctus
仅仅是将数据分解为热场和冷场是构建,维护和增加新开发人员的更多工作。在知道简单的一体化文档设计是否足够之前,为什么会产生这种成本? –