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’

 

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

MongoDB 快速入门及windows平台下的mongodb安装教程

官方教程(for windows):http://www.mongodb.org/display/DOCS/Quickstart+Windows

对 MongoDb 文档数据库感兴趣,要安装认识下。

到官方下载 win 版 http://www.mongodb.org/display/DOCS/Downloads 目前最新稳定版是 1.2.4。解压到 f:/sofr/mongodb-win32-i386-1.2.4。

1.启动 mongod 服务端

F:\soft\mongodb>bin\mongod.exe –dbpath=f:/mongodb
Mon Mar 08 11:13:17 Mongo DB : starting : pid = 0 port = 27017 dbpath = f:/mongodb master = 0 slave
= 0 32-bit

** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
** see http://blog.mongodb.org/post/137788967/32-bit-limitations for more

Mon Mar 08 11:13:18 db version v1.2.4, pdfile version 4.5
Mon Mar 08 11:13:18 git version: 5cf582d3d96b882c400c33e7670b811ccd47f477
Mon Mar 08 11:13:18 sys info: windows (5, 1, 2600, 2, ‘Service Pack 3’) BOOST_LIB_VERSION=1_35
Mon Mar 08 11:13:18 waiting for connections on port 27017

–dbpath 指定数据库的目录,默认是 /data/db,win 没有 /data/db 目录,所以直接双击 mongod 是启动不了。默认端口是 27017

下面来将MongoDB加入到Windows服务(http://www.mongodb.org/display/DOCS/Windows+Service):

F:/soft/mongodb/bin>mongod.exe --dbpath=F:/mongodb/data --logpath=F:/mongodb/logs/logs.txt
--logappend --bind_ip 127.0.0.1 --directoryperdb --install

参数:

–dbpath   这个指定数据库的存放路径
–logpath   指定日志文件
–logappend   追加的方式
–bind_ip   绑定IP地址
–directoryperdb   每个数据库单独存放在一个文件夹内
–install   安装到Windows服务,默认服务名为 MongoDB

You may use the following options with –install, –reinstall and –remove: in the examples, {arg} is any text. Use quotes around the text if it includes spaces.

–serviceName {arg} Specify the service name (used with “net start/stop”, and usually does not include spaces)
–serviceDisplayName {arg} Specify the service’s display name
–serviceDescription {arg} Specify the service’s description
–serviceUser {arg} Specify login account for running the service (account must have the “Log on as a service” right)
–servicePassword {arg} Specify password for login account

成功之后可以看到类似下面的信息:

all output going to: F:/mongodb/logs/logs.txt
Creating service MongoDB.
Service creation successful.
Service can be started from the command line via ‘net start “MongoDB”‘.

注意:路径路径要使用绝对路径,不能使用相对路径.否则会出错!

启用MongoDB服务

f:/soft/mongodb/bin>net start  MongoDB

Continue reading

NoSQL数据库探讨之一 - 为什么要用非关系数据库?

随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如:

1、High performance – 对数据库高并发读写的需求
web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求,例如像JavaEye网站的实时统计在线用户状态,记录热门帖子的点击次数,投票计数等,因此这是一个相当普遍的需求。

2、Huge Storage – 对海量数据的高效率存储和访问的需求
类似Facebook,twitter,Friendfeed这样的SNS网站,每天用户产生海量的用户动态,以Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,例如腾讯,盛大,动辄数以亿计的帐号,关系数据库也很难应付。 Continue reading