分类目录归档:mysql资料

MySQL高效分页解决方案集(转)

        平时用到的分页方法不多,只从索引、分表、使用子查询精准定位偏移以外,没有使用到其它方法。
后来在看其它博客看到了一些不同的方案,也一直没有整理。今天有时间,整理出来,分享给大家。一,最常见MYSQL最基本的分页方式:

select * from content order by id desc limit 0, 10

在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引。随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似:

select * from content order by id desc limit 10000, 10

一言以蔽之,就是越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢。
此时,我们可以通过2种方式:
一,子查询的分页方式来提高分页效率,飘易用的SQL语句如下:

SELECT * FROM `content` WHERE id> (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) ORDER BY id desc LIMIT $pagesize

为什么会这样呢?因为子查询是在索引上完成的,而普通的查询时在数据文件上完成的,通常来说,索引文件要比数据文件小得多,所以操作起来也会更有效率。(via)通过explain SQL语句发现:子查询使用了索引!

id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY content range PRIMARY PRIMARY 4 NULL 6264 Using where
2 SUBQUERY content index NULL PRIMARY 4 NULL 27085 Using index

经过飘易的实测,使用子查询的分页方式的效率比纯LIMIT提高了14-20倍!

 

二,JOIN分页方式

select * FROM `content` AS t1
JOIN (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) AS t2
WHERE t1.id

经过我的测试,join分页和子查询分页的效率基本在一个等级上,消耗的时间也基本一致。explain SQL语句:

id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY system NULL NULL NULL NULL 1
1 PRIMARY t1 range PRIMARY PRIMARY 4 NULL 6264 Using where
2 DERIVED content index NULL PRIMARY 4 NULL 27085 Using index

三,使用MYSQL的FOUND_ROWS()函数
Mysql FOUND_ROWS() 函数结合SQL_CALC_FOUND_ROWS在SELECT中可以得到两个结果:
1. 得到Limit的内容
2. 得到去除Limit以后所有行数

SELECT语句中经常可能用LIMIT限制返回行数。有时候可能想要知道如果没有LIMIT会返回多少行,但又不想再执行一次相同语句。那么,在SELECT查询中包含SQL_CALC_FOUND_ROWS选项,然后执行FOUND_ROWS()就可以了:

select SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT FOUND_ROWS();

其中SQL_CALC_FOUND_ROWS 告诉Mysql将sql所处理的行数记录下来,FOUND_ROWS() 则取到了这个纪录。 虽然也是两个语句,但是只执行了一次主查询,所以效率比原来要高很多。

1. 如果在前一条语句中使用SQL_CALC_FOUND_ROWS选项,FOUND_ROWS()将返回第一条语句没有LIMIT时返回的行数。
2. 如果在前一条语句中没有使用SQL_CALC_FOUND_ROWS选项,FOUND_ROWS()将返回前一条语句实际返回的行数。
如 果使用 SELECT SQL_CALC_FOUND_ROWS,MySQL必须计算所有结果集的行数。尽管这样,总比再执行一次不使用LIMIT的查询要快多了吧,因为那样结 果集要返回客户端滴。(另外:应该不单是没有将结果集返回的原因,还有原因可能是比如LIKE之类比较费劲的SQL不需要再去劳累一次。)

-- 注意下面语句中的条件 LIKE
SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE Name LIKE '%string%' id > 100 LIMIT 10;
SELECT FOUND_ROWS();

-- 上面语句等价于下面语句,但性能方面应该提升非常非常的明显:
SELECT COUNT(*) FROM tbl_name WHERE Name LIKE '%string%' ;
SELECT * FROM tbl_name WHERE Name LIKE '%string%' id > 100 LIMIT 10;

参考博客:

http://blog.hexu.org/archives/1328.shtml

http://hi.baidu.com/thinkinginlamp/blog/item/17476d22d66876a14623e81d.html

http://www.piaoyi.org/php/MySQL-SUBQUERY-index.html

最棒的10款MySQL_GUI工具

MySQL[1]是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策(本词条"授权政策"),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。

相关介绍如下:http://baike.baidu.com/link?url=zRTn5ClhmRb5fVJ67kyFpOdHMvgAcLc4t9EJa7BIT07IuCjpTvCUbjt7w8EHZDj6

专业的管理和操作可以通过mysql自身的管理端和客户端连接上服务器进行, 但是有个图形化的管理界面会让事情更简单更高效,下面从网络上找了几个相关管理工具, 供参考

1. Workbench

制造商:Sun Systems/Oracle
网站:http://dev.mysql.com/downloads/workbench/
价格:免费
许可证:GPL License
支持平台:Microsoft Windows,Mac OS X,Linux

MySQL Workbench是一款图形化的数据库设计工具,它在一个开发环境中集成了SQL的开发,管理,数据库设计,创建以及维护。它是 fabFORCE.net旗下DBDesigner 4的继承者,并替代了MySQL GUI Tools Bundle。当前版本是5.2,最早版本是5.0,这是为了强调MySQL Workbench是作为DBDesigner4的继承者被开发出来的事实。

2. Navicat

制造商:PremiumSoft ™ CyberTech Ltd.
网站:http://www.navicat.com/en/products/navicat_mysql/mysql_overview.html
价格:如下所示:

Windows Edition ( Non-Commercial )

US $209 (disk)

US $199 (download)

Windows Edition

US $379 (disk)

US $369 (download)

Mac OS X Edition ( Non-Commercial )

US $209 (disk)

US $199 (download)

Mac OS X Edition

US $329 (disk)

US $319 (download)

Linux Edition ( Non-Commercial )

US $189 (disk)

US $179 (download)

Linux Edition

US $329 (disk)

US $319 (download)

配有30天试用版。
许可证:Commercial 或 Non-commercial licenses.
支持平台:Microsoft Windows,Mac OS X,Linux

用于MySQL的Navicat既是一个数据库管理器同时还是一个开发工具。它适用于从3.21以上的任何MySQL数据库服务器,并且支持包括触发器,存储过程,函数,事件,预览和用户管理在内的绝大多数最新的MySQL功能。

Navicat的功能非常复杂,足以满足专业开发人员的各种特殊需求,同时对于MySQL新手来说也非常简单易学。

3. Sequel Pro

制造商:The Sequel Pro Project(开源)
网站:http://www.sequelpro.com/
价格:免费(接受通过PayPal的捐赠)
许可证:GNU GPL 2.0
支持平台:Mac OS X Tiger Universal Build

Sequel Pro是一款免费的开源程序。它是CocoaMySQL Mac数据库管理程序的继承者。CocoaMySQL是Lorenz Textor的新构想,他是CocoaMySQL的早期的(2003年)主要开发人员。

Sequel Pro用于管理MySQL数据库(本地或在Internet上)。您可以使用它来添加删除数据库和表,修改字段和索引,预览和过滤表的内容,添加编辑删除行,执行自定义查询,转储表或整个数据库。

它兼容MySQL 3.x,4,5。

4. HeidiSQL

制造商:Ansgar Becker
网站:http://www.heidisql.com/
价格:免费(接受通过PayPal的捐赠)
许可证:GNU General Public License
支持平台:Windows 2000,XP,Vista,7(可通过Wine运行于任何Linux之上)

之前被称为MySQL-Front的HeidiSQL是一款免费的开源客户端,由德国程序员Ansgar Becker开发,同时还得到了一些Delphi贡献者的帮助。用户必须通过许可证书创建一个会话登陆本地或远程MySQL服务器,才可以使用 HeidiSQL管理数据库。通过这个会话,用户可以管理所链接的MySQL服务器的MySQL数据库,并在完成之后断开。它的功能集足够应付绝大多数常见和高级数据库,表,数据记录选项,但是目前还处于积极的开发中,以求能实现MySQL前端的所有功能。

另外还有一款由Java编写的jHeidi,它被设计用于Mac和Linux计算机。遗憾的是,该项目已于2010年3月终止了。

5. phpMyAdmin

制造商:The phpMyAdmin Project (on Sourceforge)
网站:http://www.phpmyadmin.net/home_page/
价格:免费(接受通过PayPal的捐赠)
许可证:GNU General Public License, version 2
支持平台:Microsoft Windows,Mac OS X,Linux,PHP 4 - 5,MySQL 3 - 5

PhpMyAdmin是一款免费的软件工具,采用PHP编写,用于在线处理MySQL管理。PhpMyAdmin支持多种MySQL操作,最常用的操作包括管理数据库,表,字段,关系,索引,用户,权限。同时还允许您直接执行SQL语句。

Tobias Ratschiller曾经是IT顾问,后来创建了Maguma软件公司。由于受到Peter Kuppelwieser开发的MySQL-Webadmin的影响,于1998年开始了基于PHP的MySQL的web前端开发。因时间不足,他与 2000年放弃了该项目(以及同样有他开发的phpAdsNew)。就在那时,phpMyAdmin已成为最受欢迎的PHP程序和MySQL管理工具之一,它拥有广泛的社区用户和贡献者。为了协调越来越多的补丁,Olivier Müller,Marc Delisle以及Loïc Chapeaux三位开发人员在注册 SourceForge.net注册了phpMyAdmin项目,并于2001年接手开发工作。

6. SQL Maestro MySQL Tools Family

制造商:SQL Maestro Group
网站:http://www.sqlmaestro.com/products/mysql/
价格:范围从$99的非商业程序到$1949的MySQL Admin Tools Bundle,其中包括完整的网站商业许可证外加3年升级。捆绑包中包括了SQL Maestro,Data Wizard,Code Factory,Service Center以及PHP Generator Pro。
许可证:全范围支持从单独的非商业到附带3年免费升级的站点商业许可证
支持平台:Windows 2000,XP,Vista,7

SQL Maestro Group提供了完整的数据库管理,开发和管理工具,适用于所有主流DBMS。通过GUI界面,您可以执行查询和SQL脚本,管理用户以及他们的特权,导入,导出到处和数据备份。同时,您还可以为所选定的表以及查询生成PHP脚本,并转移任何ADO兼容数据库到MySQL数据库。

捆绑包中包括:

SQL Maestro for MySQL
专业的MySQL GUI管理工具,支持所有最新的MySQL 5.0和5.1。功能包括预览,过程,触发器和表分区。

Data Wizard for MySQL
MySQL的转储,以及数据导出/导入工具等。

Code Factory for MySQL
用于编辑SQL脚本和创建SQL语句的可视化工具集。

Service Center for MySQL
用于MySQL服务器维护。

PHP Generator for MySQL
生成高性能MySQL PHP脚本。配有免费版本。

7. SQLWave

制造商:Nerocode
网站:http://www.nerocode.com/
价格:$99.00
许可证:shareware。查看http://www.nerocode.com/license.txt以获得更多相关信息。
支持平台:Windows 2000,XP,Vista,7

Nerocode SQLWave是一款MySQL GUI客户端工具,被设计用来自动化和简化数据库的开发进程。它同时还提供了更简便的方法来开拓和维护现有数据库,以及不同方式来设计复杂SQL语句,查询和数据操作。兼容MySQL 4.x - 6.x。

配有30天试用版。

8. dbForge Studio

制造商:devart
网站:http://www.devart.com/dbforge/mysql/studio/
价格:免费的Express版,$49.95(非商业标准版),$99.99(非商业专业版)。
许可证:商业和非商业许可证。提供订阅这一高效快速的方法来实现产品升级和技术支持。
支持平台:Windows 2000,XP,Vista,7

用于MySQL的DbForge Studio提供了图形化的MySQL开发和管理。

有三个版本:Express,Standard,Professional。

Express是免费应用程序,提供用于架构对象,用户账户,SQL脚本和查询的基本功能。

Standard为数据库管理员和开发者提供了附加工具,比如debugger,Query Builder,代码模板,对象检索,各种输出和维护向导。

Professional是全功能版本并添加了以下设计:数据库项目,对数据库结构(架构比较)或数据库内容(数据比较)进行准确的比较和同步,调试已存储的过程和脚本,创建复杂查询。

dbForge的其他工具包括:

Schema Compare for MySQL

Data Compare for MySQL

Query Builder for MySQL

Fusion for MySQL

9. DBTools Manager

制造商:DBTools Software
网站:http://www.dbtools.com.br/EN/dbmanagerpro/
价格:标准版免费。单一授权的企业版为$69.90 USD。Discounts版适用于所中许可证。
许可:标准版授权于标准免费软件条件。企业版授权于销售单位。
支持平台:Windows 2000,XP,Vista,7

标准版
特别为个人使用设计,它配备最低限功能,适用于数据库新手执行基本的数据库管理。您可以在非商业的前提下免费使用它。如果用于商业使用,您可以购买授权,同时还将提供额外功能。

企业版
特别为企业使用设计,它更适用于那些寻找集成化数据库管理程序的DBA和开发人员。购买前,您可以先试用。企业版的试用版是全功能的,您有20天的时间进行所有的尝试,同时基于完整的体验来决定是否购买。

同时支持MySQL 3,4,5。

10. MyDB Studio

制造商:H2LSoft, Inc.
网站:http://www.mydb-studio.com/
价格:免费
授权:免费软件
支持平台:Windows 2000,XP,Vista,7

MyDB Studio包含了用于MySQL服务器管理的完整工具集。它可用于创建/编辑/放弃数据库对象,数据库同步,以及数据导出/导入。数据库管理员还可以用它来执行数据库转移,以及备份和还原。它支持使用SSH隧道来保护您的链接,即便您的主机不允许远程访问链接,用户和权限管理,以及PHP脚本创建,您依然可以进行连接。

常见的MySQL命令

mysql比较常用相关命令如下, 相关命令来源互联网进行了简单的整理

一、连接 MySQL

格式: mysql -h主机地址 -u用户名 -p用户密码

1、例1:连接到本机上的MYSQL。

首先在打开DOS窗口,然后进入mysql bin目录 ,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:

mysql>

2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:

mysql -h110.110.110.110 -uroot -pabcd123

(注:u与root可以不用加空格,其它也一样)

3、退出MYSQL命令: exit (回车)。

二、修改密码

格式:mysqladmin -u用户名 -p旧密码 password 新密码

1、例1:给root加个密码ab12。首先在DOS下进入mysql bin目录,然后键入以下命令:

mysqladmin -uroot -password ab12

注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

2、例2:再将root的密码改为djg345。

mysqladmin -uroot -pab12 password djg345

三、增加新用户。

(注意:和上面不同,下面的因为是MySQL环境中的命令,所以后面都带一个分号作为命令结束符 Mysql环境就是登陆mysql中, 一般是在mysql的客户端环境中, 在mysql>的提示符里面输入的命令, 一般都需要用;结尾。 若是您没有输入相应的;,mysql会一直等待您输入的。

格式:grant select on 数据库.* to 用户名@登录主机 identified by \"密码\"

例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL,然后键入以下命令:

grant select,insert,update,

delete on *.* to test2@localhost identified by \"abc\";

如果你不想test2有密码,可以再打一个命令将密码消掉。

grant select,insert,update,delete on mydb

.* to test2@localhost identified by \"\";

在上面讲了登录、增加用户、密码更改等问题。下面我们来看看MySQL中有关数据库方面的操作。注意:你必须首先登录到MySQL中,以下操作都是在MySQL的提示符下进行的,而且每个命令以分号结束。

四.常用命令

下面这些命令都是mysql环境中, 常用的操作命令

1、MySQL常用命令

create database name; 创建数据库

use databasename; 选择数据库

drop database name 直接删除数据库,不提醒

show tables; 显示表

describe tablename; 表的详细描述

select 中加上distinct去除重复字段

mysqladmin drop database name 删除数据库前,有提示。

显示当前mysql版本和当前日期

select version(),current_date;

2、修改mysql中root的密码:

shell>mysql -u root -p

mysql> update user set password=password("xueok654123″) where user='root';

mysql> flush privileges //刷新数据库

mysql>use dbname; 打开数据库:

mysql>show databases; 显示所有数据库

mysql>show tables; 显示数据库mysql中所有的表:先use mysql;然后

mysql>describe user; 显示表mysql数据库中user表的列信息);

3、grant

创建一个可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令something做这个

mysql> grant all privileges on *.* to user@localhost identified by 'something' with

增加新用户

格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"

GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY 'something' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO monty@"%" IDENTIFIED BY 'something' WITH GRANT OPTION;

删除授权:

mysql> revoke all privileges on *.* from root@"%";

mysql> delete from user where user="root" and host="%";

mysql> flush privileges;

创建一个用户custom在特定客户端it363.com登录,可访问特定数据库fangchandb

mysql >grant select, insert, update, delete, create,drop on fangchandb.* to custom@ it363.com identified by ' passwd'

重命名表:

mysql > alter table t1 rename t2;

4、mysqldump

备份数据库(注意这个命令, 不是mysql环境中的命令, 是操作系统中的一般命令,可以再windows或者linux执行)

shell> mysqldump -h host -u root -p dbname >dbname_backup.sql

恢复数据库

shell> mysqladmin -h myhost -u root -p create dbname

shell> mysqldump -h host -u root -p dbname < dbname_backup.sql

如果只想卸出建表指令,则命令如下:

shell> mysqladmin -u root -p -d databasename > a.sql

如果只想卸出插入数据的sql命令,而不需要建表命令,则命令如下:

shell> mysqladmin -u root -p -t databasename > a.sql

那么如果我只想要数据,而不想要什么sql命令时,应该如何操作呢?

   mysqldump -T./ phptest driver

其中,只有指定了-T参数才可以卸出纯文本文件,表示卸出数据的目录,./表示当前目录,即与mysqldump同一目录。如果不指定driver 表,则将卸出整个数据库的数据。每个表会生成两个文件,一个为.sql文件,包含建表执行。另一个为.txt文件,只包含数据,且没有sql指令。

8种NoSQL数据库对比

来源:互联网

相关文章:

MongoDB基本操作指南
NoSQL数据库
MongoDB集群
MongoDB数据库
MongoDB备份与恢复
8种NoSQL数据库对比
配置mongodb分片群集(sharding cluster)
记一次MongoDB性能问题,附原理解析
mongodb之insert和save函数的区别
mongodb shell无法删除问题 与 secureCRT使用退格键出现^H解决办法
Mongodb源码分析之Mongos分析
PHP操作MongoDB

 

虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破。这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举。NoSQL: 是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储。现今的计算机体系结构在数据存储方面要求具备庞大的水平扩展性,而 NoSQL致力于改变这一现状。目前Google的BigTable和Amazon的Dynamo使用的就是NoSQL型数据库。参见NoSQL词条。

image

但是NoSQL数据库之间的不同,远超过两SQL数据库之间的差别。这意味着软件架构师更应该在项目开始时就选择好一个适合的NoSQL数据库。针对这种情况,这里对Cassandra、Mongodb、CouchDB、Redis、Riak、Membase、Neo4j和HBase进行了比较:

1.CouchDB

  • 所用语言:Erlang
  • 特点:DB一致性,易于使用
  • 使用许可:Apache
  • 协议:HTTP/REST
  • 双向数据复制,
  • 持续进行或临时处理,
  • 处理时带冲突检查,
  • 因此,采用的是master-master复制(master-master复制:是一种数据库同步方法,允许数据在一组计算机之间共享数据,并且可以通过小组中任意成员在组内进行数据更新。)
  • MVCC-写操作不阻塞读操作
  • 可保存文件之前的版本
  • Crash-only(可靠的)设计
  • 需要不时地进行数据压缩
  • 视图:嵌入式映射/减少
  • 格式化视图:列表显示
  • 支持进行服务器端文档验证
  • 支持认证
  • 根据变化实时更新
  • 支持附件处理
  • 因此,CouchApps(独立的js应用程序)
  • 需要jQuery程序库

最佳应用场景:适用于数据变化较少,执行预定义查询,进行数据统计的应用程序。适用于需要提供数据版本支持的应用程序。

例如:CRM、CMS系统。master-master复制对于多站点部署是非常有用的。

2.Redis

  • 所用语言:C/C++
  • 特点:运行异常快
  • 使用许可:BSD
  • 协议:类Telnet
  • 有硬盘存储支持的内存数据库,
  • 但自2.0版本以后可以将数据交换到硬盘(注意,2.4以后版本不支持该特性!)
  • Master-slave复制(Master-slave复制:如果同一时刻只有一台服务器处理所有的复制请求,这被称为Master-slave复制,通常应用在需要提供高可用性的服务器集群。)
  • 虽然采用简单数据或以键值索引的哈希表,但也支持复杂操作,例如ZREVRANGEBYSCORE。
  • INCR&co(适合计算极限值或统计数据)
  • 支持sets(同时也支持union/diff/inter)
  • 支持列表(同时也支持队列;阻塞式pop操作)
  • 支持哈希表(带有多个域的对象)
  • 支持排序sets(高得分表,适用于范围查询)
  • Redis支持事务
  • 支持将数据设置成过期数据(类似快速缓冲区设计)
  • Pub/Sub允许用户实现消息机制

最佳应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。

例如:股票价格、数据分析、实时数据搜集、实时通讯。

3.MongoDB

  • 所用语言:C++
  • 特点:保留了SQL一些友好的特性(查询,索引)。
  • 使用许可:AGPL(发起者:Apache)
  • 协议:Custom,binary(BSON)
  • Master/slave复制(支持自动错误恢复,使用sets复制)
  • 内建分片机制
  • 支持javascript表达式查询
  • 可在服务器端执行任意的javascript函数
  • update-in-place支持比CouchDB更好
  • 在数据存储时采用内存到文件映射
  • 对性能的关注超过对功能的要求
  • 建议最好打开日志功能(参数--journal)
  • 在32位操作系统上,数据库大小限制在约2.5Gb
  • 空数据库大约占192Mb
  • 采用GridFS存储大数据或元数据(不是真正的文件系统)

最佳应用场景:适用于需要动态查询支持;需要使用索引而不是map/reduce功能;需要对大数据库有性能要求;需要使用CouchDB但因为数据改变太频繁而占满内存的应用程序。

例如:你本打算采用MySQL或PostgreSQL,但因为它们本身自带的预定义栏让你望而却步。

http://www.iigrowing.cn/tags/mongodb

4.Riak

  • 所用语言:Erlang和C,以及一些Javascript
  • 特点:具备容错能力
  • 使用许可:Apache
  • 协议:HTTP/REST或者custombinary
  • 可调节的分发及复制(N,R,W)
  • 用JavaScriptorErlang在操作前或操作后进行验证和安全支持。
  • 使用JavaScript或Erlang进行Map/reduce
  • 连接及连接遍历:可作为图形数据库使用
  • 索引:输入元数据进行搜索(1.0版本即将支持)
  • 大数据对象支持(Luwak)
  • 提供“开源”和“企业”两个版本
  • 全文本搜索,索引,通过Riak搜索服务器查询(beta版)
  • 支持Masterless多站点复制及商业许可的SNMP监控

最佳应用场景:适用于想使用类似Cassandra(类似Dynamo)数据库但无法处理bloat及复杂性的情况。适用于你打算做多站点复制,但又需要对单个站点的扩展性,可用性及出错处理有要求的情况。

例如:销售数据搜集,工厂控制系统;对宕机时间有严格要求;可以作为易于更新的web服务器使用。

5.Membase

  • 所用语言:Erlang和C
  • 特点:兼容Memcache,但同时兼具持久化和支持集群
  • 使用许可:Apache2.0
  • 协议:分布式缓存及扩展
  • 非常快速(200k+/秒),通过键值索引数据
  • 可持久化存储到硬盘
  • 所有节点都是唯一的(master-master复制)
  • 在内存中同样支持类似分布式缓存的缓存单元
  • 写数据时通过去除重复数据来减少IO
  • 提供非常好的集群管理web界面
  • 更新软件时软无需停止数据库服务
  • 支持连接池和多路复用的连接代理

最佳应用场景:适用于需要低延迟数据访问,高并发支持以及高可用性的应用程序

例如:低延迟数据访问比如以广告为目标的应用,高并发的web应用比如网络游戏(例如Zynga)

6.Neo4j

  • 所用语言:Java
  • 特点:基于关系的图形数据库
  • 使用许可:GPL,其中一些特性使用AGPL/商业许可
  • 协议:HTTP/REST(或嵌入在Java中)
  • 可独立使用或嵌入到Java应用程序
  • 图形的节点和边都可以带有元数据
  • 很好的自带web管理功能
  • 使用多种算法支持路径搜索
  • 使用键值和关系进行索引
  • 为读操作进行优化
  • 支持事务(用Javaapi)
  • 使用Gremlin图形遍历语言
  • 支持Groovy脚本
  • 支持在线备份,高级监控及高可靠性支持使用AGPL/商业许可

最佳应用场景:适用于图形一类数据。这是Neo4j与其他nosql数据库的最显著区别

例如:社会关系,公共交通网络,地图及网络拓谱

7.Cassandra

  • 所用语言:Java
  • 特点:对大型表格和Dynamo支持得最好
  • 使用许可:Apache
  • 协议:Custom,binary(节约型)
  • 可调节的分发及复制(N,R,W)
  • 支持以某个范围的键值通过列查询
  • 类似大表格的功能:列,某个特性的列集合
  • 写操作比读操作更快
  • 基于Apache分布式平台尽可能地Map/reduce
  • 我承认对Cassandra有偏见,一部分是因为它本身的臃肿和复杂性,也因为Java的问题(配置,出现异常,等等)

最佳应用场景:当使用写操作多过读操作(记录日志)如果每个系统组建都必须用Java编写(没有人因为选用Apache的软件被解雇)

例如:银行业,金融业(虽然对于金融交易不是必须的,但这些产业对数据库的要求会比它们更大)写比读更快,所以一个自然的特性就是实时数据分析

http://www.iigrowing.cn/tags/cassandra

8.HBase(配合ghshephard使用)

  • 所用语言:Java
  • 特点:支持数十亿行X上百万列
  • 使用许可:Apache
  • 协议:HTTP/REST(支持Thrift,Thrift是一种接口定义语言,为多种其他语言提供定义和创建服务,由Facebook开发并开源。)
  • 在BigTable之后建模
  • 采用分布式架构Map/reduce
  • 对实时查询进行优化
  • 高性能Thrift网关
  • 通过在server端扫描及过滤实现对查询操作预判
  • 支持XML,Protobuf,和binary的HTTP
  • Cascading,hive,andpigsourceandsinkmodules
  • 基于Jruby(JIRB)的shell
  • 对配置改变和较小的升级都会重新回滚
  • 不会出现单点故障
  • 堪比MySQL的随机访问性能

最佳应用场景:适用于偏好BigTable:)并且需要对大数据进行随机、实时访问的场合。

例如:Facebook消息数据库(更多通用的用例即将出现)

当然,所有的系统都不只具有上面列出的这些特性。这里我仅仅根据自己的观点列出一些我认为的重要特性。与此同时,技术进步是飞速的,所以上述的内容肯定需要不断更新。

相关文章:

MongoDB基本操作指南
NoSQL数据库
MongoDB集群
MongoDB数据库
MongoDB备份与恢复
8种NoSQL数据库对比
配置mongodb分片群集(sharding cluster)
记一次MongoDB性能问题,附原理解析
mongodb之insert和save函数的区别
mongodb shell无法删除问题 与 secureCRT使用退格键出现^H解决办法
Mongodb源码分析之Mongos分析
PHP操作MongoDB

 

mysql JDBC URL格式及其参数说明

开源:互联网

mysql JDBC URL格式如下:

jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参数值2]...

常用的几个较为重要的参数:

参数名称参数说明缺省值最低版本要求
user数据库用户名(用于连接数据库)所有版本
password用户密码(用于连接数据库)所有版本
useUnicode是否使用Unicode字符集,如果参数characterEncoding设置为gb2312gbk,本参数值必须设置为truefalse1.1g
characterEncodinguseUnicode设置为true时,指定字符编码。比如可设置为gb2312gbkfalse1.1g
autoReconnect当数据库连接异常中断时,是否自动重新连接?false1.1
autoReconnectForPools是否使用针对数据库连接池的重连策略false3.1.3
failOverReadOnly自动重连成功后,连接是否设置为只读?true3.0.12
maxReconnectsautoReconnect设置为true时,重试连接的次数31.1
initialTimeoutautoReconnect设置为true时,两次重连之间的时间间隔,单位:秒21.1
connectTimeout和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本03.0.1
socketTimeoutsocket操作(读写)超时,单位:毫秒。 0表示永不超时03.0.1

对应中文环境,通常mysql连接URL可以设置为:
jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false

在使用数据库连接池的情况下,最好设置如下两个参数:
autoReconnect=true&failOverReadOnly=false

需要注意的是,在xml配置文件中,url中的&符号需要转义成&。比如在tomcatserver.xml中配置数据库连接池时,mysql jdbc url样例如下:
jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
default-autowire="autodetect">

<!-- -->
<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="driverUrl" value="jdbc:oracle:thin:shina/shina@192.168.0.136:1521:orcl" />
<property name="alias" value="proxool" />
<property name="user" value="shina"/>
<property name="password" value="shina"/>
<property name="minimumConnectionCount" value="200" />
<property name="maximumConnectionCount" value="1000" />
<property name="maximumActiveTime" value="980000" />
</bean>

<!--
<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
<property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="driverUrl" value="jdbc:sqlserver://192.168.0.254:1433;databaseName=shina;user=sa;password=1234" />
<property name="alias" value="proxool" />
<property name="user" value="sa"/>
<property name="password" value="1234"/>
<property name="minimumConnectionCount" value="200" />
<property name="maximumConnectionCount" value="1000" />
<property name="maximumActiveTime" value="980000" />
</bean>
-->

<!--
<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="driverUrl" value="jdbc:mysql://localhost:3306/qiche315_test?user=root&password=root&useUnicode=true&characterEncoding=utf8&autoReconnect=true" />
<property name="user" value="root" />
<property name="password" value="root" />
<property name="minimumConnectionCount" value="2" />
<property name="maximumConnectionCount" value="10" />
</bean>
-->

<!--
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/qiche315_test" />
<property name="user" value="root" />
<property name="password" value="root" />
<property name="minPoolSize" value="2" />
<property name="maxPoolSize" value="10" />
<property name="maxIdleTime"><value>1800</value></property>
<property name="acquireIncrement"><value>2</value></property>
<property name="maxStatements"><value>0</value></property>
<property name="initialPoolSize"><value>2</value></property>
<property name="idleConnectionTestPeriod"><value>1800</value></property>
<property name="acquireRetryAttempts"><value>30</value></property>
<property name="breakAfterAcquireFailure"><value>true</value></property>
<property name="testConnectionOnCheckout"><value>false</value></property>
</bean>
-->

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
<!--  首页 企业管理知识 -->
<!--
<bean id="enterpriseKnowledgeAction" class="shina.index.enterpriseKnowledge.EnterpriseKnowledgeAction" scope="session"  />
<bean id="enterpriseKnowledgeService" class="shina.index.enterpriseKnowledge.EnterpriseKnowledgeService"  />
-->
</beans>