首页 文章

Azure表存储性能非常特定的表

提问于
浏览
1

有没有办法围绕500个实体/秒/分区与ATS(Azure表存储)?好的脏读 . 如果插入不能立即读取,则确定 .

希望将一些大型表从SQL移动到ATS .

  • Scale:由于这些表的大小超过了SQL Azure的150 GB限制

  • 插入速度:查询速度的倒排索引 . 插入顺序不按表聚集索引排序,这会导致快速SQL表碎片 . ATS很可能比SQL具有插入优势 .

  • 成本:ATS的月费较低 . 但是ATS的负载成本高达数百万行,并且不能批量处理,因为负载的顺序不是分区 .

  • 查询速度:搜索几乎从不在一个partitionKey上 . 搜索将具有SQL组件和零个或多个ATS组件 . 此ATS查询始终由partitionKey和返回rowKeys . 对partitionKey的原始搜索很快,问题是返回实体(行)的时间 . 给定的partitionKey平均有1,000个rowKeys,在500个实体/秒/分区时为2秒 . 但是会有一些partitionKey拥有超过100,000个rowKeys,相当于超过3分钟 . 一次返回10,000行,并且在SQL中没有查询超过10秒,因为连接的功能不必降低100,000行以在那里考虑这些行 .

  • 这个选择实体的速度是否与ATS有关?对于比例和插入速度,想转到ATS .

Windows Azure Storage Abstractions and their Scalability Targets

How to get most out of Windows Azure Tables

Designing a Scalable Partitioning Strategy for Windows Azure Table Storage

关闭实体跟踪以查找不会被修改的查询结果:context.MergeOption = MergeOption.NoTracking;

2 回答

  • 2

    一种可能的解决方法是跨多个分区和/或表划分数据,并行地跨所有(子)分区执行查询并合并结果 .

    例如,对于跨分区的条带化,使用单个数字前置分区键可以使分区的可伸缩性倍增10倍 .

    因此,分区键(例如ABCDEFGH)可以将0ABCDEFGH子分区为9ABCDEFGH .
    写入分区,前缀数字随机生成或以循环方式生成 . 读取将并行查询所有10个分区并合并结果 .

    对于跨表的条带化,N个表中的一个可以随机或以循环方式写入,并且可以类似地并行查询 .

  • 1

    编辑:我原先说过限制是500个事务/分区/秒 . 那是不对的 . 该限制实际上是500个实体/分区/秒,如原始问题中所述 .

    这也适用于您计算的查询速度 . 如果您查询ATS PartitionKey并返回1000个实体,那么返回单个实体可能只需要更长的时间,也许几百毫秒 . 另一方面,如果查询返回超过1000个实体,则它将慢得多,因为每组1000行需要基本上独立的事务,并且必须以串行方式完成 .

    我不清楚你在做什么,但听起来好像很多 . 请记住,在非键列上查询ATS往往非常慢 . 如果您正在做很多事情,那么使用SQL Azure Federations和扇出查询可能会更好 .

相关问题