例如,Google App Engine使用Google Datastore而不是标准数据库来存储数据.有没有人有使用Google数据存储而不是数据库的提示?似乎我已经训练了我的思想,在直接映射到表结构的对象关系中100%思考,现在很难看到任何不同的东西.我可以理解Google数据存储区的一些好处(例如性能和分发数据的能力),但牺牲了一些好的数据库功能(例如连接).
与Google Datastore或BigTable合作过的人是否有任何与他们合作的好建议?
database google-app-engine google-cloud-datastore google-cloud-platform
我有兴趣听听你用过非关系型"nosql"数据库的设计策略- 也就是说,不使用传统关系设计或SQL的(通常是新的)数据存储类(如Hypertable,CouchDB, SimpleDB,Google App Engine数据存储,Voldemort,Cassandra,SQL数据服务等).它们通常也被称为"键/值存储",而在基础上它们就像巨大的分布式持久哈希表.
具体来说,我想了解概念数据设计与这些新数据库的差异.什么更容易,更难,什么不能完成?
您是否想出了在非关系世界中工作得更好的替代设计?
你有没有碰到任何看似不可能的东西?
您是否与任何设计模式弥合了差距,例如从一个设计模式转换为另一个设计模式?
你现在甚至都在做明确的数据模型(例如在UML中),还是让你完全放弃它们以支持半结构化/面向文档的数据blob?
您是否错过了RDBMS提供的任何主要额外服务,例如关系完整性,任意复杂的事务支持,触发器等?
我来自SQL关系数据库背景,所以标准化在我的血液中.也就是说,我获得了非关系数据库的优点,简化和扩展,我的直觉告诉我必须有更丰富的设计功能重叠.你做了什么?
仅供参考,这里有类似主题的StackOverflow讨论:
我认为我可以使用SimpleDB来处理我的应用程序中最具挑战性的区域(就缩放而言) - 类似Twitter的评论,但位置在顶部 - 直到我坐下来实际开始实现它SDB.
首先,SDB每个属性值有1000个字节的限制,即使是注释也是不够的(可能需要将更长的值分解为多个属性).
然后,最大域大小为10GB.承诺是您可以扩展而不必担心数据库分片等,因为SDB不会随着数据量的增加而降级.但是如果我理解正确的话,对于域名,我会遇到与分片完全相同的问题,即.在某些时候需要在应用程序级别跨域实现数据记录的分发和查询.
即使对于我在整个应用程序中使用的最简单的对象,即.原子用户评级,SDB不是一个选项,因为它无法计算查询中的平均值(一切都是基于字符串的).因此,要计算对象的平均用户评级,我必须加载所有记录 - 一次250个 - 并在应用程序级别计算它.
我错过了关于SDB的一些事情吗?10GB真的可以用来克服所有SDB限制吗?我真的很热衷于利用SDB,因为我已经使用了S3和EC2,但现在我根本没有看到用例.
我正处于设计应用程序的早期阶段,该应用程序必须具有高可用性和可扩展性.出于多种原因,我想为此使用最终的一致性数据模型.我知道并理解为什么这是许多解决方案不受欢迎的架构选择,但在我的案例中这很重要.
我正在寻找真实世界的建议,最佳实践以及在处理分布式/文档式数据库时需要注意的问题.尤其是电子商务(购物车风格)应用程序周围的区域,传统上更容易与关系数据库组合在一起.
我知道使用这些类型的数据库具有挑战性,但是嘿,Google和E-bay使用它们所以它们不能那么难;-)任何建议都会受到赞赏.
像Google BigTable和Amazon SimpleDB这样的新学校数据存储范例是专门为可扩展性而设计的.基本上,禁止连接和非规范化是实现这一目标的方法.
然而,在这个主题中,共识似乎是大型表上的连接不一定必须太昂贵,并且非规范化在某种程度上被"高估"为什么然后,这些上述系统不允许连接并强制所有连接在一起单表实现可扩展性?是否需要存储在这些系统中的大量数据(许多兆兆字节)?
数据库的一般规则是否根本不适用于这些尺度?是因为这些数据库类型专门用于存储许多类似的对象吗?
或者我错过了一些更大的图片?
database scalability bigtable amazon-simpledb key-value-store
我想要一个显示标题的页面以及用户朋友最近10篇帖子的博客链接.我还希望能够继续回溯旧条目.
所以在sql land中它会是这样的:
select * from blog_post where user_id in (select friend_id from user_friend where user_id = :userId) order by date
我不相信这些解决方案中的任何一个都会扩展.
我确定其他人已经遇到了这个问题,但我已经搜索过,观看谷歌io视频,阅读其他代码......我缺少什么?
我正在尝试查询google数据存储区(类似于pm - > persistanceManager):
String filters = "( field == 'value' || field == 'anotherValue' )";
Query query = pm.newQuery(myType.class, filters);
Run Code Online (Sandbox Code Playgroud)
当我执行时 - 我回来了:App Engine数据存储区不支持运算符OR.
对于这类查询,人们体验的最佳方法是什么?
任何帮助赞赏!