我认为我可以使用 SimpleDB 来处理我的应用程序中最具挑战性的区域(就扩展而言) - 类似 Twitter 的评论,但位置位于顶部 - 直到我坐下来实际开始实施它深圳发展银行。

首先,SDB 每个属性值有 1000 字节的限制,这甚至对于注释来说也是不够的(可能需要将较长的值分解为多个属性)。

那么,最大域大小为 10GB。我们承诺您可以进行扩展,而不必担心数据库分片等问题,因为 SDB 不会随着数据负载的增加而降级。但如果我理解正确的话,对于域,我会遇到与分片完全相同的问题,即。有时需要在应用层面实现数据记录的跨域分发和查询。

即使对于我在整个应用程序中拥有的最简单的对象,即。原子用户评级,SDB 不是一个选项,因为它无法计算查询中的平均值(一切都是基于字符串的)。因此,要计算某个对象的平均用户评分,我必须加载所有记录(一次 250 条)并在应用程序级别进行计算。

我是否遗漏了有关 SDB 的信息?10GB 的数据库真的足以克服所有 SDB 限制吗?老实说,我非常热衷于利用 SDB,因为我已经使用了 S3 和 EC2,但现在我根本没有看到用例。

有帮助吗?

解决方案

我用SDB的一对夫妇的肥胖型应用程序。每个域的10 GB的限制并不担心我,但我们是在赌博,在亚马逊允许这一点,如果我们需要它来进行扩展。他们有他们的网站上申请表,如果你想要更多的空间。

至于横域加入,不要以为SDB的作为一个传统的数据库。在我的数据到SDB的迁移,我不得不进行非规范化一些,所以我可以做手工跨域连接。

每个属性限制的1000字节是很难解决也。我有应用的是博客服务,存储的信息和评论在数据库中。虽然在移植它SDB,我就遇到了这个限制。我结束了存储信息和评论,在S3中的文件,并在我的代码读取。由于这台服务器是在EC2上,交通到S3不花费任何额外的东西。

也许的其他问题中的一个需要注意的是在SDB中的最终一致性模型。你不能写入数据,然后与任何保证新写入的数据将被退还给你读回。最终的数据将被更新。

这一切说,我仍然爱SDB。我不后悔切换到它。我从SQL 2005服务器移动。我想,我曾与SQL更大的控制权,但一旦放弃该控件,我有更多的灵活性。不需要预先确定的模式是真棒。在代码中一个强大和稳健的缓存层,很容易使深发展更灵活。

其他提示

我的 SimpleDB 中有大约 50GB,分布在 30 个域中。我使用它来允许存储在 S3 中的对象上有多个密钥,并且还可以降低我的 S3 成本。我还没有尝试过使用 SimpleDB 进行全文搜索,但我不会尝试它。

SimpleDB 可以工作、很简单等等,但它并不是适合每种情况的功能集。就您而言,如果您需要聚合,SimpleDB 不是正确的解决方案。它是围绕以下思想流派构建的:数据库只是一个键值存储,聚合应该由将结果写回到键值存储的聚合过程来处理。这正是所需要的 对于某些应用程序。

这是 描述我如何使用 SimpleDB 精打细算

这是值得补充的是,虽然有跨域写自己的分片的逻辑是不理想的,它是在性能方面。例如,如果你需要跨数据100GB的搜索,最好要问20台机器持有5GB每个执行对他们负责的部分相同的搜索,而不是执行整个任务的一台机器。如果你的目标是与排序列表结束了,你可以从20个并发查询返回的最好成绩,并整理他们的机器上发起请求。

这是说,我宁愿看到正常使用这个抽象和具有类似的API中的“提示”,如果你想获得较低的水平。所以,如果你碰巧存储数据的100GB,让亚马逊决定它是否跨越20台或10或40分区,和分发工作。例如,在谷歌的BigTable设计,作为表的增长它不断地划分为400MB片。要求从一个表中的行是如此简单,和BigTable的确实搞清楚在一个片剂或百万片剂它生活的工作。

话又说回来,BigTable的要求你写的MapReduce调用来执行一个查询,而SimpleDB的指标本身动态地为你,所以你赢了一些,你失去一些。

如果每个属性的存储大小是可以使用S3来存储较大的数据,并存储所述链接到SDB的S3对象的问题。 S3不仅仅是为文件,这是一个通用的存储解决方案。

亚马逊正试图让你实现一个简单的对象数据库。这主要是由于速度的原因。的SimpleDB的记录认为为是指针/键在S3的元素。这样你就可以对SimpleDB的运行查询(慢才能得到结果列表,也可以直接打S3与一键(快速)拉对象时需要检索或修改记录单在-A-时间。

在限制似乎适用于当前的β释放。我以为他们将允许更大的数据库在未来,他们弄清楚后,他们如何能经济地服务的需求。即使有限制,10GB的数据库,它支持高可扩展性和可靠性是有用的和经济有效的资源。

请注意可扩展性是指保持一个的稳定和浅性能曲线的能力,同时数据量或请求的量的增长。这并不一定意味着最佳性能,也不意味着非常高的容量的数据存储。

亚马逊的SimpleDB还提供了一个免费服务层上,这样你就可以存储高达1GB,传输高达1GB /月,使用长达25小时的加工时间。虽然这听起来限制非常低,事实上,它是免费的允许一些规模小的客户使用该技术,如果没有大的服务器场中的投资。

我正在构建一个商业 .NET 应用程序,它将使用 SimpleDB 作为其主要数据存储。我还没有投入生产,但我也一直在构建一个开源库,该库解决了使用 SimpleDB 与 RDBS 时遇到的一些问题。我的路线图上的一些功能与您提到的问题相关:

  • 数据的透明分区
  • 伪事务性
  • 超过1000字节限制的属性的透明跨度

SimpleDB 仍在积极开发中,最终肯定会带来许多现在所没有的功能(一些添加到核心系统中,一些添加到代码库中)。

.NET 库是 简单学者.

我不相信有关 SimpleDB 的所有炒作,并且基于以下限制看不出应该使用它的原因(我知道现在您可以使用几乎任何技术构建几乎任何东西,但这不是选择一个的原因) 。

所以我看到的局限性:

  • 只能在亚马逊AWS上运行,你也应该 支付一大堆员工的工资
  • 域(表)的最大大小为 10 GB
  • 属性值长度(字段大小)为1024字节
  • 选择响应中的最大项目数 - 2500
  • Select 的最大响应大小(可以返回给您的最大数据量) - 1Mb,实际上您可以检查所有 这里的限制
  • 驱动程序仅用于 几种语言 (java、php、python、ruby、.net)
  • 不允许不区分大小写的搜索。您必须引入额外的小写字段/应用程序逻辑。
  • 排序只能进行 在一个场上
  • 因为5秒的时间限制 计数可能会表现得很奇怪. 。如果 5 秒过去了,查询还没有完成,您最终会得到一个部分号码和一个允许您继续查询的令牌。应用程序逻辑负责收集所有这些数据并进行总结。
  • 一切都是 UTF-8 字符串, ,这使得处理非字符串值(如数字、日期)变得很痛苦。
  • 对于数字来说,排序行为很奇怪(因为一切都是字符串)。所以现在你必须做一个 带衬垫的萨满舞蹈
  • 两者都没有事务和连接
  • 无复合、地理静态、多列索引、无外键

如果这还不够,那么您还必须忘记一些基本的事情,例如 group by, sum average, distinct 以及数据操作。总的来说,查询语言非常初级,只提醒我们 SQL 可以做什么的一小部分。

因此,其功能并不比 Redis/Memcached 丰富,但我非常怀疑它在用例中的性能是否与这两个数据库一样好。

SimpleDB 将自己定位为无模式、基于文档的 nosql 数据库,但 MongoDB/CouchDB 的查询语法更具表现力,并且它们的限制也更合理。

最后 - 不要忘记 供应商锁定. 。如果几年后 Azure(或其他可能出现的东西)将提供比 AWS 便宜 5 倍的云托管,那么转换将非常困难。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top