当前位置:  开发笔记 > 编程语言 > 正文

哪个CouchDB或MongoDB适合我的需求?

如何解决《哪个CouchDB或MongoDB适合我的需求?》经验,为你挑选了1个好方法。

在我工作的地方,我们使用Ruby on Rails来创建后端和前端应用程序.通常,这些应用程序与同一MySQL数据库交互.它适用于大多数数据,但我们有一种情况可以转移到NoSQL环境.

我们有客户,我们的客户拥有我们所谓的"库存" - 其中一个或多个.库存可以包含数千个商品.这是目前通过两个关系数据库表进行,inventoriesinventory_items.

当两个不同的库存具有不同的参数时,问题就开始了:

# Inventory item from inventory 1, televisions 
{
  inventory_id: 1
  sku: 12345
  name: Samsung LCD 40 inches
  model: 582903-4
  brand: Samsung
  screen_size: 40
  type: LCD
  price: 999.95
}

# Inventory item from inventory 2, accomodation
{
  inventory_id: 2
  sku: 48cab23fa
  name: New York Hilton
  accomodation_type: hotel
  star_rating: 5
  price_per_night: 395
}

因为我们显然不能使用brandstar_rating作为列名inventory_items,我们的解决方案至今一直使用通用列名,例如text_a,text_b,float_a,int_a,等,并引入第三个表,inventory_schemas.表现在看起来像这样:

# Inventory schema for inventory 1, televisions 
{
  inventory_id: 1
  int_a: sku
  text_a: name
  text_b: model
  text_c: brand
  int_b: screen_size
  text_d: type
  float_a: price
}

# Inventory item from inventory 1, televisions 
{
  inventory_id: 1
  int_a: 12345
  text_a: Samsung LCD 40 inches
  text_b: 582903-4
  text_c: Samsung
  int_a: 40
  text_d: LCD
  float_a: 999.95
}

这一点运作良好......在某种程度上.它很笨重,它不直观,缺乏可扩展性.我们必须投入资源来设置库存模式.使用单独的表不是一种选择.

输入NoSQL.有了它,我们可以让每个项目都有自己的参数,并仍然将它们存储在一起.从我所做的研究来看,对于这种情况来说,这似乎是一个很好的改变.

具体来说,我看过CouchDB和MongoDB.两者看起来都很棒 但是,我们需要对库存做一些其他的工作:

我们需要能够从一个(或几个)库存中选择项目.

我们需要能够根据其参数过滤项目(例如,从库存2获取类型为'hotel'的所有项目).

我们需要能够根据参数对项目进行分组(例如,从品牌为'三星'的库存1中获取最低价格).

我们需要(可能)一次能够检索数千个项目.

我们需要能够从多个应用程序访问数据; 后端(处理数据)和前端(显示数据).

尽管不是必需的,但仍需要快速批量插入.

基于结构和要求,CouchDB或MongoDB适合我们吗?如果是这样,哪一个最适合?

感谢阅读,并提前感谢您的答案.

编辑:我喜欢CouchDB的原因之一是我们在前端应用程序中可以在页面加载后直接从服务器通过JavaScript请求数据,并显示结果而无需使用任何后端代码.这将导致更好的页面加载和更少的服务器压力,因为数据的提取/处理将在客户端完成.



1> kristina..:

我在MongoDB上工作,所以你应该带着一点点盐,但这看起来非常适合Mongo.

我们需要能够从一个(或几个)库存中选择项目.

在任何字段上进行即席查询都很容易.

我们需要能够根据其参数过滤项目(例如,从库存2获取类型为'hotel'的所有项目).

对此的查询将是:{"inventory_id" : 2, "type" : "hotel"}.

我们需要能够根据参数对项目进行分组(例如,从品牌为'三星'的库存1中获取最低价格).

再次,超级简单: db.items.find({"brand" : "Samsung"}).sort({"price" : 1})

我们需要(可能)一次能够检索数千个项目.

没问题.

尽管不是必需的,但仍需要快速批量插入.

MongoDB的批量插入速度比CouchDB快得多.

此外,MongoDB还有一个REST接口:http://github.com/kchodorow/sleepy.mongoose

您可能需要阅读http://chemeo.com/doc/technology,他们处理MongoDB的任意属性搜索问题.


是的,Mongo有一个与GROUP BY非常相同的组功能,请参阅http://www.mongodb.org/display/DOCS/Aggregation
推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有