甚至可以创建一个可以容纳关系数据库和非关系数据库的抽象层吗?此层的目的是最小化重复,并允许Web应用程序通过在一个位置(即抽象层)更改/修改代码来使用任何类型的数据库。位于抽象层顶部的部分不必担心底层数据库是关系数据库(SQL)还是非关系数据库(NoSQL)或将来可能会出现的任何新类型的数据库。
答案 0 :(得分:2)
现在有a Summer of Code project正在为Django的ORM添加非关系支持。它似乎进展顺利,很有可能它会在Django 1.3中及时合并到核心。
答案 1 :(得分:2)
你可以使用股票Django和Django-nonrel(http://www.allbuttonspressed.com/projects/django-nonrel)来获得相当统一的体验。一些限制适用,但仔细阅读文档,记住Spolsky的“所有抽象都是漏洞”。
答案 2 :(得分:1)
Yo也可以检查web2py,它们支持核心的关系数据库和GAE。
答案 3 :(得分:1)
关于App Engine,所有现有尝试都以某种方式限制您(例如,web2py不支持事务或名称空间以及许多其他内容)。如果您打算使用GAE,请使用GAE提供的内容,忘记寻找SQL-NoSQL圣杯。现有的解决方案不可避免地受到限制,并对性能产生负面影响。
答案 4 :(得分:0)
感谢您的所有答案。总结答案,目前只有web2py和Django支持这种抽象。
它不是关于SQL-NoSQL的圣杯,使用抽象可以使应用程序更加灵活。让我们假设您使用NoSQL启动了一个项目,然后您需要切换到SQL。您只需要在几个地方而不是在整个地方更改代码。在某些情况下,将数据存储在关系数据库或非关系数据库中并不重要。例如,存储用户配置文件,动态页面的文本内容或博客条目。 我知道必须通过使用抽象进行权衡,但我的问题更多的是关于现有解决方案或技术洞察力,而不是后果。