代码之家  ›  专栏  ›  技术社区  ›  Xeoncross

CouchDB和MongoDB真的用JavaScript搜索每个文档吗?

  •  1
  • Xeoncross  · 技术社区  · 14 年前

    这就是它的工作原理吗?听起来比使用没有索引键的普通RBMS更糟糕。

    列在RAM中 快速检查一下它们的价值( WHERE user_id IN (12,43,5,2) revision = 4 )为数据库提供一个简单的ID列表,用于在海量数据收集的实际行中查找ID。

    每一行

    4 回复  |  直到 14 年前
        1
  •  2
  •   Gates VP    14 年前

    @Xeoncross公司

    我构建了我的模式,这样它们就不需要连接操作,这样我就可以对索引的int列进行简单的搜索。换言之,列在RAM中,并通过它们进行快速值检查(其中用户id在(12,43,5,2)或revision=4)

    那么,你会喜欢MongoDB的。MongoDB支持索引,因此您可以索引用户id和修订版,此查询将能够相对快速地返回。

    所以我试着想象一下,在这个世界上,通过查看数据库中的每一行是如何被认为是可以接受的(如果确实是这样的话)。

    i、 e:从每一排看过去 ).

    他们搜索每条记录并将其传递给您编写的JavaScript函数,该函数通过查看每条记录来计算要返回的结果。

    所以实际上大多数NoSQL数据库都支持这一点。但请不要使用它进行实时查询。此选项主要用于执行用于汇总数据的map reduce操作。

    这里可能有一个对NoSQL的不同看法。SQL非常擅长关系操作,但是关系操作的伸缩性不是很好。许多NoSQL关注的是关键值/面向文档的概念。

    这是一个很大的权衡,但如果在现代网络应用程序上说得通的话。大部分时间都是用来装东西的 页面(blog post,wiki entry,SO question)和大多数数据都与该元素绑定或“挂起”。因此,通过一个水平可伸缩的查询获取所需的所有内容的概念非常有用。

        2
  •  2
  •   Dominic Barnes    14 年前

    就CouchDB而言,Map函数可以是Javascript,但也可以是Erlang。(如果您使用第三方视图服务器,则完全可以使用另一种语言)

    此外,视图是增量计算的。换句话说,map函数在创建时在数据库中的所有文档上运行,但是对数据库的进一步更新只会影响视图的相关部分。

    在某些方面,视图的内容类似于RDBMS中的索引字段。输出是一组键/值对,可以很快地进行搜索,因为它们存储为b树,一些rdbms使用b树存储索引。

        3
  •  1
  •   Øyvind Skaar    14 年前
        4
  •  1
  •   marc_s HarisH Sharma    9 年前

    不同的 ... 事实上,考虑到某些域/函数,“NoSQL”范例比传统的、在某些观点中过时的RDMBS实现要快得多。想想谷歌的大桌面平台,你会得到MongoDB、Riak、CouchDB、Cassandra(Facebook)和许多很多其他公司正在努力实现的目标。主要的区别在于,这些NoSQL解决方案大多侧重于键/值存储(有些称为“文档”数据库),没有关系(在主键/外键方面)和连接的概念。表上的连接操作可能非常昂贵。另外,不要忘记对象关系阻抗失配问题。。。访问MongoDB不需要ORM。它实际上可以将代码对象(或文档)存储在内存中。你能想象在代码行和复杂度上的节省吗!?db4o是另一个实现这一点的轻量级解决方案。

    我不知道你说的“不仅仅是SQL”数据库是什么意思?这是一个no SQL范式,其中没有SQL用于查询系统的底层数据存储。NoSQL还意味着没有一个RDBMS,SQL通常构建在它之上。尽管如此,MongoDB确实有一种类似SQL的语法,可以在检索数据时从.NET中使用—它被称为NoRM。

    我会说我只和Riak和MongoDB合作过。。。我对卡桑德拉和库奇德的阅读水平和特征集的理解都不熟悉。我更喜欢使用MongoDB而不是它们。里亚克也很好,但不是为了我需要的。您应该下载一些这些NoSQL解决方案,然后您将得到这个概念。查看db4o、MongoDB和Riak,因为我发现它们是最简单的,而且更支持基于.NET的语言。这对某些应用程序来说是有意义的。总之,NoSQL或文档数据库或OODBMS。。。无论你想称之为什么,它都非常吸引人,并且获得了很多运动。

    我也忘了你的javascript问题。。。MongoDB有JavaScript“绑定”,可以用作 搜索 为了数据。Riak通过JSON格式处理数据。我相信MongoDB使用的是BSON,我不记得其他人用的是什么。在任何情况下,重点都不是SQL(结构化查询语言)向数据库“询问”信息,其中一些(MongoDB是其中之一)使用Javascript和/或RESTful语法向NoSQL系统询问数据。我相信CouchDB和Riak可以通过HTTP进行查询,这使得它们非常容易访问。更不用说,那真是太酷了。

    做你的研究。。。。下载它们,它们都是免费的和开放源码软件。

    db4o公司: http://www.db4o.com/ (Java&.NET版本)

    里亚克: http://www.basho.com/Riak.html

    http://thechangelog.com/post/436955815/norm-bringing-mongodb-to-net-linq-and-mono