定期的备份可使我们数据库崩溃造成的损失大大降低。在MySQL中进行数据备份的方法有两种,一种是使用mysqldump程序,一种是使用mysqlhotcopy、cp、tar或cpio等打包程序直接拷贝数据库文件。mysqldump程序备份数据库较慢,但它生成的文本文件便于移植。使用mysqlhotcopy等程序备份速度快,因为它直接对系统文件进行操作,需人为协调数据库数据的备份前后一致性。
使用mysqldump备份数据库其实就是把数据库转储成一系列CREATE TABLE和INSERT语句,通过这些语句我们就可重新生成数据库。使用mysqldump的方法如下: 阅读全文
NoSQL 数据库在上年炒得很热,于是我也萌生了使用 NoSQL 数据库写一个应用的想法。首先来认识一下 NoSQL。NoSQL 是一个缩写,含义从最初的 No-SQL 到现在已经成为了 Not-Only-SQL。确实后面一种解释比较符合 NoSQL 的使用场景。
现在网络上被人所知的 NoSQL 数据库可以在这个网页(http://nosql-database.org)看到。这个列表林林总总一大堆,要选择哪个数据库入手呢?
1. 选择非关系数据库
在我关注的 Web 领域,特别是 Ruby on Rails 社区,比较多提到的是这几个数据库:
* Cassandra , apache基金会下的非关系数据库。早前一段时间传言 Twitter 要用 Cassandra 替代 Mysql,一时间坊间流传“NoSQL 要革 SQL 的命了!”。不过 Twitter 博客澄清,Twitter 只是在部分领域使用 Cassandra,存放 Tweets 的主数据库依然是 MySQL。
* MongoDB,10gen 公司的开源非关系数据库产品,可以选择他们公司的商业支持。RoR 相关的插件挺多。
* CouchDB,另一个apache基金会下的非关系数据库。
* Redis,特点是运行在内存中,速度很快。相比于用来持久化数据,也许更接近于 memcached 这样的缓存系统,或者用来实现任务队列。(比如resque) 阅读全文
MongoDB数据 库简单介绍
Mongo是一个高性能 ,开源 ,无模式 的文档型数据库 ,它在许多场景下可用于替代传统的关系型数据库或 键/值存储方式。Mongo使用C++开发 , 提供了以下功能:
面向集合的存储:适合存储对象及JSON形式的数据。
动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的 标记,可轻易查询文档中内嵌的对象及数组。
完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化 器会分析查询表达式,并生成一个高效的查询计划。
查 询监视:Mongo包含一个监视工具 用于分析数据库操作的性能。
复制 及自动故障转移:Mongo数据库支持服务器 之间的数据复制,支持主-从模式及服务 器之间的相互复制。复制的主要目标是提供冗余及自 动故障转移。
高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)。
自动分片以支持云级别的伸缩性(处于 早期alpha阶段):自动分片功能支持水平的数据库集群 ,可动态添加额外的机器。
MongoDB的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统 (丰富的功能)架起一座桥梁,集两者的优势于一 身。根据官方网站的描述,Mongo 适合用于以下场景:
网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
缓存 :由于性能很高,Mongo也适合作为信息基础 设施的缓存层。在系统重启之后,由Mongo搭建的 持久化缓存层可以避免下层的数据源 过载。
大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很 多时候程序 员往往会选择传统的文件 进行存储。
高伸缩性的场 景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支 持。
用于 对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储 及查询。
自然,MongoDB的使用也会有一些限制,例如它不适合:
高度事务性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用 程序。
传统的商业智能应用:针对 特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
需要SQL的问题
MongoDB支持OS X、Linux及Windows等操作系统 ,并提供了 Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程序,社区中也提供了对Erlang 及.NET等平台 的驱动程序 阅读全文
针对当前数据库添加用户 权限是针对当前数据
> use jieshi #进入jieshi数据库
switched to db jieshi
> db.addUser(“hapame”,”1qa2ws3ed”) #增加用户为hapame,并设置密码为1qa2ws3ed
{
“user” : “hapame”,
“readOnly” : false, #默认是赋予用户读写权限
“pwd” : “6beed8c02c5d4452e0a4de2ac7ac886c”
}
> db.auth(“hapame”,”1qa2ws3ed”) #添加用户认证
1
> db.system.users.find() #查看已存在的用户
{ “_id” : ObjectId(“4cf42f9fa071f6232e83aff0″), “user” : “hapame”, “readOnly” : false, “pwd” : “6beed8c02c5d4452e0a4de2ac7ac886c” }
> db.addUser(“admin”,”1qa2ws3ed”,true) #给数据库jieshi的用户admin赋予只读权限
{
“user” : “admin”,
“readOnly” : true,
“pwd” : “69b1f28eb1c0e10113d777d3ecb70d86″
} 阅读全文
说到php连mongoDB,不得不先介绍一下php的官方手册,网址在:http://us.php.net/manual/en/book.mongo.php
在php的mongo扩展中,提供了4类接口(对象):
1,针对mongoDB连接的操作:Mongo
http://us.php.net/manual/en/class.mongo.php
2,针对mongoDB中数据库的操作:MongoDB
http://us.php.net/manual/en/class.mongodb.php
3,针对mongoDB中collection的操作:MongoCollection
http://us.php.net/manual/en/class.mongocollection.php
4,针对查询结果集的操作:MongoCursor
http://us.php.net/manual/en/class.mongocursor.php 阅读全文
mongodb由C++写就,其名字来自humongous这个单词的中间部分,从名字可见其野心所在就是海量数据的处理。关于它的一个最简洁描述为:scalable, high-performance, open source, schema-free, document-oriented database。MongoDB的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。
阅读全文
DISTINCT 实际上和 GROUP BY 操作的实现非常相似,只不过是在 GROUP BY 之后的每组中只取出一条记录而已。所以,DISTINCT 的实现和 GROUP BY 的实现也基本差不多,没有太大的区别。同样可以通过松散索引扫描或者是紧凑索引扫描来实现,当然,在无法仅仅使用索引即能完成 DISTINCT 的时候,MySQL 只能通过临时表来完成。但是,和 GROUP BY 有一点差别的是,DISTINCT 并不需要进行排序。也就是说,在仅仅只是 DISTINCT 操作的 Query 如果无法仅仅利用索引完成操作的时候,MySQL 会利用临时表来做一次数据的“缓存”,但是不会对临时表中的数据进行 filesort 操作。当然,如果我们在进行 DISTINCT 的时候还使用了 GROUP BY 并进行了分组,并使用了类似于 MAX 之类的聚合函数操作,就无法避免 filesort 了。 阅读全文