我可以在'nosql'中知道有限制就像bigtable我们应该'非规范化'我们的表/实体吗?
任何api包装器,允许我们编写一次代码,可以用于谷歌应用程序引擎bigtable和nosql? (像hiberanate这样的东西)
答案 0 :(得分:3)
是的,例如在MongoDB中你没有加入,因为它是非关系,所以它确实改变了我们存储和浏览数据的方式。
由于MongoDB是非关系型的(没有 连接),引用(“外键”) 文件之间通常是 通过额外解决客户端 查询到服务器。两个公约 对于MongoDB中的引用很常见: 第一个简单的手动参考,和 第二,DBRef标准,其中很多 司机明确支持。
似乎共识是非规范化和重复以加速读取,以避免在应用程序级别上完成连接和合并逻辑时加入分布式数据的成本。
至于是否绝对要求对数据库进行非规范化,我不确定(其他SO成员可能会启发我们)。但我认为数据库应该在头脑中建模这些“局限性”,同时对如何查询数据进行良好的研究。这应该给过程带来最小的阻抗。
另见:
Bigtable database design theory
GAE - How to live with no joins?
允许我们编写的任何API包装器 代码一次,可以用于谷歌 应用程序引擎BigTable和nosql? (像Hibernate这样的东西)
JDO 与数据存储区无关,因此它可能只是在某种程度上提供您想要的内容。
似乎最近有很多项目将JDO和JPA与“NoSQL”产品一起使用。
见:
答案 1 :(得分:2)
任何API包装器,允许我们编写一次代码,并可用于谷歌应用程序引擎BigTable和nosql? (像Hibernate这样的东西)
虽然抽象库肯定有助于实现可移植性,但您必须考虑正在运行的特定平台。如果您要使用Google App Engine,则必须了解incurred startup costs inherent with additional abstraction libraries。
你应该权衡使用JDO或JPA之类的东西。另请查看提供更多本机接口的Objectify library,该接口具有与App Engine数据存储区耦合的缺点。