繁体   English   中英

Azure表存储的替代方案

[英]Alternatives to Azure Table Storage

我们一直在Windows Azure上使用混合体系结构,将大多数实体存储在SQL Azure数据库中,但是将任何可能需要大量存储空间的内容丢入Azure表存储中。

但是,使用这种架构,我们遇到了Azure桌面存储的各种问题,这让我觉得它是一个不成熟且不完整的产品。 最大的限制是,出于所有实际目的,它是一个只写数据存储。 大家一致认为它的写入功能非常非常好,但它的查询和索引功能是如此惊人地限制(尽管多年来用户抱怨和微软承诺 ),我得出结论你应该基本上只尝试检索数据在紧急情况下退出ATS。 从复杂的实时交易生产应用程序中获取数据比使用它更困难。 当然,有一些解决方法,比如维护多个数据副本,为每个副本分配不同的索引策略,或者拆分查询并并行运行它们,但是当云服务的整个要点最小化时,这会增加复杂性。

也就是说,我们现在已经致力于Azure,我希望对替代方案和陷阱有一个很好的理解,最好是那些实际上已经走在生产这条道路上的人们。

我非常清楚那里有很多NoSQL选项(例如,这个问题中列出的所有选项: 针对.NET的NoSQL解决方案是什么? )我可以在VM或其他云上运行。 但我特别想知道Azure的PAAS模型是否适合。 换句话说,如果我在Azure上,并且不想管理我自己的VM,并希望尽可能接近ATS承诺的几乎自动且几乎无限的可扩展性(尽管从未完全交付),有哪些选择人们发现有价值? MongoDB / Azure包装器是一个简单而可行的替代方案吗? 或者我应该咬紧牙关并启动我自己的VM? 或切换到AWS? 还是坚持使用Azure SQL?

(为了让您了解我们的尺寸要求:我们认为我们需要存储超过10亿行。不是很大,但也不可忽略不计。)

虽然Azure表存储不支持二级索引,并且没有SQL的功能集,但它并没有尝试解决同样的问题。

我会避免使用SQL Azure(或者现在称之为的任何内容)并专注于构建一个使用Azure擅长的数据层(blob,表和队列)。

我们发现表存储对于大型生产解决方案来说已经足够了。 在过去的18个月左右,它已经变得更好了。 .NET客户端库的v2比v1好得多。

与大多数应用程序一样,将架构直接移植到云平台上并不是一个好主意。 通过深入了解云中可用的内容,重新思考解决以前业务问题的方法是成功的唯一途径。

我同意之前的帖子,如果你需要索引很多数据,像Lucene这样的东西可能会很好。 我们发现使用表格和blob很好,我们可以不用,但它绝对是你工具箱中的一个选项。

我们经历了类似的情况,并研究了几个选项,提供Azure和nosql选项。

我们采取的措施是使用Azure Blob存储和Lucene.Net。 我们在Json中序列化对象,然后将它们保存在AzureBlobs中。

我们使用Lucene.Net创建索引,Lucene.Net返回获取包含我们要搜索的数据的blob所需的数据。 我们没有使用这种组合进行生产开发,但在测试中我们已经完成了它的工作非常好。

自从发布以来,Azure在NoSQL中取得了很大的进步。 您现在可以在Azure中将Raven和MongoDB作为插件启动,他们最近宣布了他们自己的产品“Azure DocumentDB”。 这是公开预览 - 博客在这里: http//azure.microsoft.com/blog/2014/08/21/new-azure-services-and-updates-expand-openness-choice-and-flexibility/

有关更多信息和文档,请访问: http//azure.microsoft.com/en-gb/services/documentdb/

正如其他人所提到的,Lucene是一种可能的搜索/索引解决方案。 我在Azure网站上有一个使用Lucene索引进行搜索的网站,我已经能够直接在网站的网站空间上存储和查询索引,因此不需要专用的VM或者担心我如何公开索引穿过电线。 显然,如果您想要维护多个Web框(缩放时),这可能会变得棘手,但可能值得您了解。 我的Web实例带有50GB的磁盘空间,其中只有一小部分被网站使用,因此Lucene索引可以使用它。 我从来没有听说过这是一个官方战略,YMMV。

也许有点偏离主题。

有几个用例,其中ATS是很棒的工具。

一种情况是存储您通常在常规RDB中存储为XML(JSON)序列化对象的元数据。 这些是数据,不需要索引,但是是结构化的。 例如,所有客户端元数据。 使用ATS而不是SQL的原因是ATS能够在移动中添加,删除此类数据的列。 因此,无论何时更改元数据结构,您都不需要遍历所有客户端记录,反序列化XML(JSON),重新创建数据树,将其序列化为XML(JSON)并将其存储回表中。 太棒了。 硬币的缺点是你必须保持元数据的扁平结构,而不是使用经典XML(JSON)序列化可以实现的树结构。

第二种情况是存储您不需要的RDBM中的数据,以防它们太多。 例如,它可以是5年以上银行系统中的交易清单。 这些是您实际需要存储的数据,但不是活动形式。 这些数据会降低您的联接/条件,并且您不需要每日基础。 您仍然可以获取这些数据或将它们移动到另一个RDBM中,以便每年进行一次离线分析。 将数据存储在ATS中也比将它们留在RDBM中便宜得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM