【问题标题】:Couchdb/Mongodb Application/Logic layer, like Oracle DBCouchdb/Mongodb 应用/逻辑层,如 Oracle DB
【发布时间】:2013-02-19 02:30:35
【问题描述】:

在我的工作中,我们使用 Oracle 作为我们的数据库。效果很好。我不是主要的数据库管理员,但我确实使用它。我喜欢的一件事是数据库有一个使用 PL/SQL 的内置逻辑层,它可以处理与保存数据和检索数据相关的逻辑。我真的很喜欢这个,因为它让我们的 MVC 应用程序(PHP/Zend 框架)更轻巧,并且更容易将另一个平台与数据联系起来,例如桌面或移动。

虽然,我有一个个人项目,我想使用 couchdb 或 mongodb,我想尝试实现类似的目标。在 mvc/framework 之外,我想要一个主要应用程序与之对话的 API 层。他们实际上并不直接与数据库对话。他们为 mongo 指定设计文档 (couchdb) 或类似的东西,以获得结果。该 API 层将验证传入的数据,并确保数据本身被正确保存和更新。比如保存一个新用户,在框架中我只需要发送一个带有需要保存的键/值的json对象,api层将数据保存在需要的适当位置。

这个 API 可能会有一个 UI,但仅用于管理目的并让我的生活更轻松。一般来说,它总是会回复 json 字符串,或者在某些情况下是预渲染/缓存的 html。因为无论如何每个 api 层都是特定于应用程序的。

我想知道是否有人做过类似的事情,或者有任何关于网络的提示,我可以做到这一点。我目前正在寻找用 python 编写我的应用程序,前端可能是 Angularjs 之类的。虽然我也在寻找 node.js 作为后端。

【问题讨论】:

    标签: python oracle node.js mongodb couchdb


    【解决方案1】:

    我们在我目前的工作中做这件事。我们在后端有 MongoDB,在它之上有一个 RESTful API,然后在前端有 PHP/Zend。

    我们的大部分数据都是只读的,因此我们将这些数据导入 MongoDB,然后 RESTful API(Java 中)提供它。

    使用这种方法需要考虑的一些事情:

    1. 在您的 API 中编写通用排序/分页逻辑。您将需要此数据列表。用户可以传入http://yourapi.com/entity/1?pageSize=10&page=3之类的东西。

    2. 确保在 Mongo 中创建适当的索引以匹配人们将查询的内容。假设您正在存储用户。在 Mongo 中的用户 id 字段上创建索引,或者只使用在所有调用中已经索引的 _id 字段。

    3. 确保在给定文档中包含所有相关数据。 Mongo 不像您在 Oracle 中习惯的那样进行连接。请记住,建模数据与文档数据库有很大不同。

    4. 您似乎想要编写一个与数据库无关的层(中间层 API)。这是一个很好的目标。请注意不要让 Mongo 特定的术语渗入您公开的 API。 Mongo 具有特定的运算符/概念,您需要使用更通用的术语来掩盖它们。例如,他们有一个 $set 运算符。不要直接暴露。

    最后,在对 CouchDB 和 Mongo 有相当多的经验之后,我肯定会选择 Mongo。

    【讨论】:

    • 我想使用沙发的原因是我可以使用主控复制,我也喜欢为 _design 文档提供本地副本的想法,我可以在其中更新这些文档并运行同步() 更新服务器中的 map/reduce。对我来说,这似乎也适合具有本地 API 层,并且我可以将 map/reduce 函数保留在我的 git 存储库中。虽然我确实喜欢 mongo 的易用性,如果我能完成同样的事情,那很好。
    • 我想使用沙发的另一个原因是,根据我的研究,它在处理财务信息(购物车/POS)方面比 mongo 更好。我将要做的一件事是销售点系统。由于灵活模式的要求,我没有使用 MySQL。
    • 我现在更喜欢 Mongo 的主要原因是它背后的社区。 Couch 仍然有支持,但 Mongo 有动力,在我看来 - 围绕产品建立了一个更好的生态系统。但两者都非常适合存储 JSON。 Mongo 副本集可能比 Couch 的 master/master 东西更难。
    猜你喜欢
    • 2012-05-09
    • 2016-08-12
    • 2014-09-04
    • 2011-02-07
    • 2012-03-14
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2010-12-18
    相关资源
    最近更新 更多