从SQL Azure中获取大行 – 但是去哪里?表,Blob或MongoDB之类的东西?

前端之家收集整理的这篇文章主要介绍了从SQL Azure中获取大行 – 但是去哪里?表,Blob或MongoDB之类的东西?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我阅读了Azure Table / Blob / sql存储之间的大量比较,我想我对所有这些都有很好的理解……但是,我仍然不确定在哪里可以满足我的特定需求.也许有人在类似场景中有经验并能够提出建议.

是)我有的

一个sql Azure DB,用于在varchar(max)列中的原始HTML中存储文章.每行还有许多元数据列和许多索引,以便于查询.该表包含许多对用户,订阅,标签等的引用 – 因此我的项目始终需要sql DB.

有什么问题

我已经在这张表中有大约500,000篇文章,我预计它每年会增加数百万篇文章.每篇文章的HTML内容可以在几KB到1 MB之间,或者在极少数情况下,大于1 MB.

出现了两个问题:由于Azure sql存储空间很昂贵,而且比以后更早,我会用自己的成本来保存.此外,我还会比以后更早地达到150 GB数据库大小限制.这500,000篇文章现在已占用1.6 GB的数据库空间.

我想要的是

很明显,那些HTML内容必须离开sql DB.虽然文章表本身必须保留用于将其加入用户,标签等以便快速关联发现所需文章,但至少保存HTML内容的列可以外包到更便宜的存储.

乍一看,Azure Table存储看起来非常合适

非常便宜的价格和快速查询在一个大表中的数TB的数据 – 听起来很完美,有一个单独的表存储表将文章内容作为sql DB的附加组件.

但是通过这里的比较显示它甚至可能不是一个选项:每列64 KB对于98%的文章来说已经足够了,但是对于某些单篇文章还有2%的权限,甚至整行的1 MB行也可能还不够.

Blob存储听起来完全错误,但……

所以Azure上只有一个选项:Blob.现在,它可能没有听起来那么错误.在大多数情况下,我一次只需要一篇文章内容.使用Blob存储时,这应该可以正常工作.

但是我也有查询,我需要一次50行,100行甚至更多行,甚至包括内容.所以我必须运行SQL查询获取所需的文章,然后从Blob存储中获取每一篇文章.我对此没有任何经验,但我无法相信在执行此操作时我可以保持毫秒级的查询时间.对于我的项目而言,花费多秒的查询是绝对禁止的.

所以它似乎也不是一个合适的解决方案.

我看起来像个有计划的人吗?

至少我有类似计划的东西.我想过只将“适当的记录”“导出”到sql表存储和/或Blob存储中.

像“只要内容<64 KB将其导出到表存储,或者将其保存在sql表中(甚至将此单个XL记录导出到BLOB存储中)” 这可能足够好了.但它使事情变得复杂,并且可能不容易出错. 那些其他选择 还有一些像MongoDB和CouchDB这样的Nosql数据库似乎更符合我的需求(至少从我天真的角度来看,只是看过纸上的规格的人,我没有经验).但是他们需要自我托管,如果可能的话,有些事我想摆脱它.我在Azure上根据自托管服务器和服务的需要尽可能少地做. 你真的在这儿读过吗? 那么非常感谢你宝贵的时间和思考我的问题:) 任何建议将不胜感激.如你所见,我有自己的想法和计划,但没有什么能比以前走过路上的人有经验:) 谢谢,
伯恩哈德

解决方法

我对此的看法:使用MongoDB(或CouchDB)路线最终会花费额外的Compute,因为您需要运行一些服务器(以获得高可用性).根据所需的性能,您最终可能会运行2核或4核盒.三个4核盒的运行速度将超过sql DB的成本(此外还有存储成本,而MongoDB等将在Azure blob中备份其数据以实现持久存储).

现在,至于将html存储在blob中:这是一种非常常见的模式,可以将大型对象卸载到blob存储中.一次调用blob存储(单个事务)就可以实现GET,特别是在你提到的文件大小范围内.而且您不必连续检索每个blob;您可以利用TPL将多个blob并行下载到您的角色实例中.

还有一件事:你是如何使用这些内容的?如果你是从你的角色实例中流式传输它,那么我对TPL的说法应该很好.另一方面,如果你将href注入输出页面,你可以直接将blob url放入你的html页面.如果您担心隐私,请将blob设为私有并生成短TTL“共享访问签名”,以便为小时间窗口授予访问权限(这仅适用于将blob url插入其他html页面;它不适用如果您正在下载到角色实例,然后在那里做一些事情).

原文链接:https://www.f2er.com/mongodb/77201.html

猜你在找的MongoDB相关文章