mongodb中实现自定义自增ID

PHP代码:

function get_autoincre_id($name, $db){
	$update = array('$inc'=>array("id"=>1));
	$query = array('table_name' => $name);
	$command = array(
		'findandmodify'=>'autoincre_system', 'update'=>$update,
		'query'=>$query, 'new'=>true, 'upsert'=>true
	);
	$id = $db->command($command);
	return $id['value']['id'];
}

其中上面的table_name可以用来区别多个表,这样可以灵活实现单独的几个表的自增ID值.

$conn = new Mongo();
$db = $conn->cms;

news_max_id = get_autoincre_id('tbl_news'); //从1开始

soft_max_id = get_autoincre_id('tbl_soft'); //从1开始

现在就可以直接在写入新记录的时候使用这个id值了.

其具体实现方式主要是利用MongoDB中findAndModify命令,

Mongodb相关学习资料

Mongo资料分享.ppt

认识MongoDB.ppt

MongoDB技术交流.ppt

SQL-to-MongoDB.pdf

QCon北京2011大会之:MongoDB开发应用实践

NoSQL应用场景及Cassandra架构分析

Windows下MongoDB管理工具(启用和服务)

mongoDB 入门指南、示例 

NoSQl存储模型

Mongo与Mysql语法对应关系图

数据库 写入 查询
MongoDb database Collection Document insert into blog.users values(“user1”,”23))===========

> use blogswitched to db blog> u = { name:"user1", age:23 }

> db.users.insert(u)

 

主要用到的查询函数式 find() 和 findOne(),前者返回一个迭代器 cursor,后者返回单个文档。

> db.users.find({name:"user1"}){
"_id" : ObjectId("4c4528a0b55f2224d447e4b0"), "name" : "user1", "age" : 21, "sex" : 1}

 

> db.users.find({name:"user1", age:21}){ "_id" : ObjectId("4c4528a0b55f2224d447e4b0"), "name" : "user1", "age" : 21, "sex" : 1 }
MySql database table Row
select * from users where name = 'user1'

 

MongoDB与CouchDB全方位对比

本文见于MongoDB官方网站,MongoDBCouchDB 很相似,他们都是文档型存储,数据存储格式都是JSON型的,都使用Javascript进行操作,都支持Map/Reduce。但是其实二者有着很多本质的区别,本文透过现象追寻本质,让你更好的理解MongoDBCouchDB。nosqlfan 翻译如下:

原文链接:Comparing Mongo DB and Couch DB

1.MVCC(Multiversion concurrency control)

MongoDB 与 CouchDB 的一大区别就是CouchDB 是一个MVCC的系统,而MongoDB是一个update-in-place 的系统。这二者的区别就是,MongoDB 进行写操作时都是即时完成写操作,写操作成功则数据就写成功了,而CouchDB 一个支持多版本控制的系统,此类系统通常支持多个结点写,而系统会检测到多个系统的写操作之间的冲突并以一定的算法规则予以解决。

2.水平扩展性

在扩展性方面,CouchDB 使用replication 去做,而MongoDB 的replication 仅仅用来增强数据的可靠性,MongoDB 在实现水平扩展性方面使用的是Sharding。(据说CouchDB 也有开发分片功能的计划) Continue reading

Redis几个认识误区

此文的作者是新浪微博平台架构师杨卫华(timyang)大师,如果关注了新浪一些牛人微博的同学应该知道,timyang前段时间正在对Redis进行一些研究和测试,也分享出了不少成果。下面一篇文章相信是timyang这段时间对Redis研究的一个总结,澄清了一些认识上的误区,值得一读。

原文链接:http://timyang.net/data/redis-misunderstanding/

前几天微博发生了一起大的系统故障,很多技术的朋友都比较关心,其中的原因不会超出James Hamilton在On Designing and Deploying Internet-Scale Service(1)概括的那几个范围,James第一条经验“Design for failure”是所有互联网架构成功的一个关键。互联网系统的工程理论其实非常简单,James paper中内容几乎称不上理论,而是多条实践经验分享,每个公司对这些经验的理解及执行力决定了架构成败。 Continue reading

NoSQL网站收集大全

总是有同学问我,网站上发的各种NoSQL相关的信息都从何而来,我又实在没有精力把自己的各种信息源整理起来。今天看到mynosql网站上的这个分享,觉得非常的好。于是把介绍简单翻译了一下照抄过来。

题目有点恶搞意味。但NoSQLFan要申明,我们不是说会停止博客更新,推荐这些网站只是给大家更多的渠道选择。have fun~

NoSQL 群组

  1. LinkedIn NoSQL group (Linkedin上面有很多NoSQL小组,这是最大的一个,其次是 Cassandra LinkedIn group).
  2. NoSQL discussions Google Group

NoSQL 论坛

目前没有发现什么专门讨论NoSQL的论坛,但是倒有一些谈论NoSQL比较热烈的地方,比如: Quora.com 还有问答式的社区:  Stackoverflow.com

NoSQL 公司的官博列表

  • Salvatore Sanfilippo (Redis):  antirez.com(这是Redis作者的个人博客,VMWare公司倒是没看到有专门发表Redis相关内容的地方)
  • Ayende @ Rahien (RavenDB): ayende.com(Oren Eini’s 同学的博客,经常发表关于RavenDB的技术文章。)
  • LinkedIn (Project Voldemort):  blog.linkedin.com.(LinkedIn公司的技术团队博客)

专门关注 NoSQL 的博客或者网站

  • nosql-databases.org: 由Stefan Edlich维护的网站,只有一个页面,NoSQL产品的大列表。
  • www.nosqldatabases.com: 由 Derek Stainer 同学维护的一个博客。
  • myNoSQL 博客,也就是提供此信息的地方,维护者是InfoQ的首席架构师Alex Popescu同学。

上面就是文章内容了,俗话说回复更精彩,下面是回复中提到的信息:

Continue reading

NoSQL族谱

下图将现在流行的NoSQL按Dynamo系和Bigtable系统做了一个划分,当然,你一看就知道是小日本的手笔。不是很全面,倒也值得一看。点击查看大图。

 

在浏览器里试用NoSQL产品

通常要使用某个存储设备,我们可能需要经历下载、安装、配置、启动等多个过程,然后才能开始试验具体的试用。而在我们很多 NoSQL 产品中,提供了一些非常方便的试用途径,可以让你不用安装一个自己的 Server 即可直接试用并学习其功能:

1.try redis 在浏览器里试用Redis

地址:http://try.redis-db.com/

直接点击上面地址即可进入下面的界面,按提示即可进行操作。

2.try mongo 在浏览器中试用MongoDB

进入MongoDB主页 点击主上方的 TRY IT OUT 导航,就会在本页展开如下图所示的伪shell 界面,和上面Redis的试用方式一样,你可以在这里试用MongoDB的基本操作。 Continue reading

关系数据库还是NoSQL数据库

上一篇简单的说明了为什么要使用NoSQL。接下来我们看下如何把NoSQL引入到我们的项目中,我们到底要不要把NoSQL引入到项目中。

在过去,我们只需要学习和使用一种数据库技术,就能做几乎所有的数据库应用开发。因为成熟稳定的关系数据库产品并不是很多,而供你选择的免费版本就更加少了,所以互联网领域基本上都选择了免费的MySQL数据库。在高速发展的WEB2.0时代,我们发现关系数据库在性能、扩展性、数据的快速备份和恢复、满足需求的易用性上并不总是能很好的满足我们的需要,我们越来越趋向于根据业务场景选择合适的数据库,以及进行多种数据库的融合运用。几年前的一篇文章《One Size Fits All - An Idea Whose Time Has Come and Gone》就已经阐述了这个观点。

当我们在讨论是否要使用NoSQL的时候,你还需要理解NoSQL也是分很多种类的,在NoSQL百花齐放的今天,NoSQL的正确选择比选择关系数据库还具有挑战性。虽然NoSQL的使用很简单,但是选择却是个麻烦事,这也正是很多人在观望的一个原因。 Continue reading

NoSQL架构实践(一)——以NoSQL为辅

本文为凤凰网负责底层组的研发工作的孙立同学在InfoQ上发表的NoSQL系列文章之一,本文探讨了使用NoSQL作存储的几种典型模式,对NoSQL的实践及应用,具有很强的指导意义。

前面《为什么要使用NoSQL》《关系数据库还是NoSQL数据库》两篇从大体上介绍了为什么要用NoSQL,何时该用NoSQL。经常有朋友遇到困惑,看到NoSQL的介绍,觉得很好,但是却不知道如何正式用到自己的项目中。很大的原因就是思维固定在MySQL中了,他们问得最多的问题就是用了NoSQL,我如何做关系查询。那么接下来,我们看下怎么样在我们的系统中使用NoSQL。

怎么样把NoSQL引入到我们的系统架构设计中,需要根据我们系统的业务场景来分析,什么样类型的数据适合存储在NoSQL数据库中,什么样类型的数据必须使用关系数据库存储。明确引入的NoSQL数据库带给系统的作用,它能解决什么问题,以及可能带来的新的问题。下面我们分析几种常见的NoSQL架构。 Continue reading