分类 "NoSql" 的存档.

关于MongoDB的全局锁

对MongoDB有所了解的人都知道,MongoDB有一个让人头疼的全局锁(读写锁,允许并发读,而写会阻塞所有的读写),要命的是这个锁不是表级的,不是库级的,而是整个Server级别的,这让人听起来是不是非常的蛋疼。

在2.0版本以前,这一问题一直没有得到解决,于是有人提出,在可预见某个update操作的记录可能在磁盘上时,为了减少写锁占用的时间,可以采用先读后写的方式,通过先读一次,将要操作的记录加载到内存中,再进行内存中的update,这样写锁就不包括将数据从磁盘加载到内存的时间了。

在可预见数据冷热的情况下,这种操作能够有一定的效果,但是很明显,这种变态的方法不应该是一个终极解决方案。

值得庆幸的是,在2.0版本中,MongoDB宣称有很大程度的并发性能提升,而这一提升的基础正是解决了这个全局锁的问题。

解决的方法并不是通过减少锁粒度来解决,虽然collection级别的锁机制也正在开发中。(SERVER-1240)

解决方法是通过对一些可能造成长时间锁占用的操作进行锁抑制。比如和我们上面的方法类似,在进行update操作时,如果发现需要更新的记录在磁盘上,那么这个锁就不会一直占用,而是等到将数据从磁盘加载到内存后再添加写锁进行update。

而同理,对于其它一些可能耗时比较长的操作也可以采用类似的方法,通过将长时间占用的全局锁拆分成多个细粒度的小锁来使需要获取锁来进行的操作能够交错的执行,从而避免一夫当关万夫莫开的情况,主要包括下面一些操作:

查询操作
批量更新操作
批量删除操作
批量insert写入操作

Read more…

连接MongoDB,认证登陆MongoDB.–php

例子:

以认证模式启动本地MongoDB,限定只能本地登陆,需要认证:

mongod -dbpath d:mongodb1.8.2db --bind_ip localhost --auth

默认连接到本地服务器的默认端口:

mongodb://localhost

以用户名’fred’和密码’foobar’连接并登录到admin数据库:

mongodb://fred:foobar@localhost

以用户名’fred’和密码’foobar’连接并登录到baz数据库:

mongodb://fred:foobar@localhost/baz

Read more…

原创翻译—MongoDB入门(PHP客户端)

原文:MongoDB as in huMONGOus, not retarded

最近公司有一个比较大的项目,涉及到的数据很多,需要做一个统计分析系统,供做决策使用。考虑放弃mysql,使用NoSql数据库,我觉得MongoDB最适合了,看了一片MongoDB入门的文章,觉得不错,抽时间一点点翻译翻译,翻译的不对、不好的地方,还请大家多多指教。

——————————————————————————-

与其他人不一样,我不会在iPad上写任何东西。是的,我仍在写Popurls Clone系列的后续部分,而且和往常一样,它花费了我比预期更长的时间。生活是美好的~~一大堆账单蜂拥而至,它证明:你确实需要通过“工作”来“挣钱”。但是,我们为什么会这么认为??那是相当愚蠢的,就像在动画《星球大战》前传/续集中发生克隆战争一样(不知道这么翻译对不对,看《The Big Bang Theory》也多次提到了《星球大战》,一直想看,也没机会看,将来会抽时间学习下的~:))当人们开始思考一些人生伟大的、有意义的事情时,比如说:你怎样逃掉你的账单。我想,是时候写一些关于数据库的东西了。你看到前面这些话之间的联系了么?–看懂了?太好了,虽然我不知道有啥关系,哈哈哈哈。。。。在谷歌搜索mysql,大约有1.17亿条结果,如果搜索MongoDB,只有1、2百万左右,很好。这意味着,如果我的这篇文章被谷歌收录了,它将构成不少于8.33 × 10-7 %的相关搜索的结果。与mysql的形成鲜明的对比,是5.88 × 10-9 %。我也已经写了不少关于mysql的东西,我真是个大好人啊[害羞]…简单来说,本文将覆盖MongoDB以及你如果在PHP中使用它,前边的东西让大家高兴下,如果你不感冒,那么你还是不用看了~~

简要介绍MongoDB

首先,MongoDB不是像mysql一样的关系型数据库RDBMS,关系数据库是基于关系模型、基于埃德加·弗兰克在1969年提出的一阶逻辑。数据及它们的内在关系,不存储为表,表构成了它们之间的关系,这些表由一些固定数量的垂直列和不固定数量的行的模型组成,理论上,行可以无限大。数据通过SQL语句来进行查询,好了——-我们这里讨论的是关于NoSql技术的一部分–MongoDB,在Nosql技术中,有三种类型的数据库:以列为导向的,Key/Value键值对的,以及以文档存储为导向的,MongoDB属于第三类。在这里,一个文档,就是一个带有一些给定属性的数据结构,这些属性可以是字符串、数字、数组或者Objects等等,如果你在PHP中接触过复合数组或者Object对象,你就明白是什么意思了。你也可以在collections中给文档分组,同样的,有一些叫做子文档的,你也可以那样认为。

Read more…

MongoDB as in huMONGOus, not retarded –原文

摘自:http://pronewb.com/mongodb-as-in-humongous-not-retarded

Unlike the rest of the known world, I won’t write anything on the iPad. Yet. Instead, I’m still in the process of writing the upcoming parts of my Popurls Clone series and as per usual, it takes a lot more time than expected. In combination with a massive amount of bills, life is good! As it turns out, you actually need to “work” in order to get “money”. How, when and why did we agree upon that? That’s just as stupid as, say, doing a fully animated Star Wars prequel/sequel to take place during the Clone Wars. Oh, wait… While pondering life’s great mysteries, such as how you can evade paying your bills, I felt it was time to write something about databases. You see the connection, right? Good, because I don’t. A quick Google search for MySQL rendered roughly 117 million results so I figured that another article about it would be kinda superfluous. A search for MongoDB on the other hand resulted in “only” 1,2 million results. Much better. That means that if and when this article gets indexed by the Google, it will constitute no less than ~ 8.33 × 10-7 % of the relevant search results, in stark contrast to the ~ 5.88 × 10-9 %, should I’ve written some stuff about MySQL. Goodie! In short, this article will cover MongoDB and how you can use it with PHP. Good times ahead so if you’re a killjoy, you’re not welcome.

Read more…

入门MongoDB,你需要注意的4个技巧

作者写下这篇文章的用意,就是提醒广大DBA不要重蹈覆辙。特别是MongoDB初学者需要注意这四个技巧,会避免你走很多弯路。

我之所以喜欢MongoDB,主要是因为在动态语言中使用它是如此的简单,自然。到目前为止,我已经在两个项目(Encode 和 Sparrw)中使用过它了,虽然对这个选择我非常满意,但是有些问题我还是没有注意到,这些问题让我抓了好几个小时的头皮才解决。如果你有多台机器,然后为数据库多分配几台机器,那么有些问题可以迎刃而解,但是我的项目是运行在单个(虚拟)服务器之上的低流量Web应用程序。

(关于MongoDB,具体可以参考:http://www.mongodb.org/)

(关于作者的两个项目Encode 和 Sparrw,分别可以参考:http://en.co.de/和http://sparrw.com/)

这些问题都很简单,都是一些文档化的东西,不是什么Bug(当然,这要看你问谁了)。如果你读过所有的文档,那么这些问题可能你基本都见过了。我也是,但是在那之后,当再次遇到它们的时候,我就把文档中的内容都忘到脑后了,然后,我不得不再次修复它们。

Read more…

MongoDB,无模式文档型数据库简介

Mongo是一个高性能,开源,无模式的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。Mongo使用C++开发,提供了以下功能:

◆面向集合的存储:适合存储对象及JSON形式的数据。

◆动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。

◆完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。

◆查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。

Read more…