作者:辛勤的核桃4dr_797 | 来源:互联网 | 2014-05-28 16:53
目前使用的NoSQL数据库可以分为四个大类:1.Key-valuedatastores:数据以键值对存储,通过键来检索值。例如redis,dynomite,voldemort.2.Column-baseddatabases:这些数据库组织的数据存储在表中,类似于RDBMS。但是,它们存储的内容是按列而不是按行。对
目前使用的NoSQL数据库可以分为四个大类:
1.Key-value data stores: 数据以键值对存储,通过键来检索值。例如redis, dynomite,
voldemort.
2.Column-based databases:
这些数据库组织的数据存储在表中,类似于RDBMS。但是,它们存储的内容是按列而不是按行。对于数据仓库应用是非常好的。例如Hbase,
Cassandra, Hypertable.
3.Document-based databases:
数据存储和组织作为一个集合文档。这些文档是灵活的,每个文档可以有任意数量的字段。例如CouchDB, MongoDB.
4.Graph-based data-stores:
此类数据库应用于计算机科学图论的数据存储和检索。专注于不同部位的数据互联互通。数据的单位作为可视化节点和它们之间关系定义为连接节点的边缘。例如Neo4j.
MongoDB组成部分:
1.Database:
可以有多个数据库,每个数据库作为一个相互独立的容器。每个数据库可以包含一个或多个集合(collection).
2.Collection:
集合是一组文档(document)。在逻辑上相当于关系型数据库中的表。但是与表不同的是,在向集合存储数据时无需事先定义数据结构。
3.Document:
集合中存储文档的单位。一个文档包含了一系列字段或键值对。键是字符串,值可以是各种类型:字符串,整数,浮点数,时间戳,布尔值等等,甚至可以存储另一个文档。是以json格式存储的。
MongoDB数据交换格式:
文档的结构是一个JSON对象。当将这个文档存储于数据库中,将被序列化成一个特殊的二进制编码格式,成为BSON。
BSON是MongoDB默认的数据交换格式。与XML和JSON相比BSON的优势在于内存的消耗和处理时间上更高效。JSON支持BSON支持的所有数据类型,同时还支持一些特殊的数据类型,比如正则表达式,对象ID,日期,二进制数据和代码。更好的移植性,编程语言如PHP,PYTHON,JAVA等等可以直接从BSON格式进行转换,易于与MongoDB融合和管理维护数据。
MongoDB与RDMS对比:
RDMS: database—>table—>row—>column
MongoDB: database—>collection—>document—>field
MongoDB集合中没有外键,没有联合查询,约束性管理通常由应用层处理。因此其架构很灵活,也没有昂贵的alter
table操作。
MongoDB安装:
# apt-key adv ?keyserver keyserver.ubuntu.com ?recv 7F0CEB10
# vi /etc/apt/sources.list.d/10gen.list
deb http://downloads-distro.mongodb.org/repo/debian-sysvinit
dist 10gen
# apt-get update
# apt-get install mongodb-10gen
命令行操作:
# mongo
> use myfirstdb
> db.movies.insert({name:”Hangover”, genre:”comedy”,
year:2010})
> db.movies.find()
{ “_id” : ObjectId(“4fe1680418f0c60b236a4f28″), “name” :
“Hangover”, “genre” : “comedy”, “year” : 2010 }
PHP-MongoDB扩展:
# apt-get install php-pear
# pecl install mongo
# vim /etc/php5/conf.d/mongo.ini
extension=mongo.so
使用PHP来操作MongoDB:
# vi mongodb.php
try{
$mOngo= new
Mongo(“mongodb://127.0.0.1:27017″,array(‘timeout’=>100));
//连接mongodb
$databases = $mongo->listDBs(); //列出所有数据库
print_r($databases);
$mongo->close();
}catch (Exception $e){
die ($e->getMessage());
}
?>
查询结果如下:
Array
(
[databases] => Array
(
[0] => Array
(
[name] => myfirstdb
[sizeOnDisk] => 218103808
[empty] =>
)
[1] => Array
(
[name] => local
[sizeOnDisk] => 1
[empty] => 1
)
[2] => Array
(
[name] => test
[sizeOnDisk] => 1
[empty] => 1
)
)
[totalSize] => 218103808
[ok] => 1
)