2017-05-05 categories:
资料 tags:
MongoDB author:
快乐成长
本文将快速介绍Spring Data for Mongo的使用。
Spring Data for MongoDB是Spring Data的一个子模块。 目标是为MongoDB提供一个相近的一致的基于Spring的编程模型。
Spring Data for MongoDB核心功能是映射POJO到Mongo的DBCollection中的文档,并且提供Repository 风格数据访问层。相似的ORM/持久化框架还有morphia: MongoDB官方支持的ORM框架,可以很好的和Spring, Guice等DI框架集成,使用起来很方便。
Hibernate OGM: Hibernate提供了Hibernate风格的NoSql ORM框架。
jongo: 提供Mongo shell一样灵活的查询,并且提供ORM by Jackson,和Mongo java driver一样快。
特性:
可以通过@Configuration注解或者XML风格配置
MongoTemplate 辅助类 (类似JdbcTemplate),方便常用的CRUD操作
异常转换
丰富的对象映射
通过注解指定对象映射
持久化和映射声明周期事件
通过MongoReader/MongoWriter 定义底层的映射
基于Java的Query,
…
阅读全文
2013-11-05 categories:
资料 tags:
MongoDB , nosql author:
sch
来源:互联网
<?php
error_reporting(7);
$conn = new Mongo();
$db = $conn->PHPDataBase;
$collection = $db->PHPCollection;
/*—————————–
* 删除
*—————————–
$collection->remove(array(“name” => “xixi111″));
*/
/*——————————
* 插入
*——————————
for($i = 0;$i <= 50;$i++) {
$data = array(“name” => “xixi”.$i,”email” => “673048143_”.$i.”@qq.com”,”age” => $i*1+20);… 阅读全文
2013-09-15 categories:
mysql资料 tags:
MongoDB , nosql , redis author:
sch
来源:互联网
相关文章:
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词条。
但是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(可靠的)设计
需要不时地进行数据压缩
视图:嵌入式映射/减少
格式化视图:列表显示
支持进行服务器端文档验证
支持认证 …
阅读全文
2013-05-07 categories:
资料 tags:
MongoDB , nosql author:
sch
MongoDB提供了auto-sharding 功能。因为其是auto-sharding,即mongodb通过mongos(一个自动分片模块,用于构建一个大规模的可扩展的数据库集群,这个集群可 以并入动态增加的机器)自动建立一个水平扩展的数据库集群系统,将数据库分表存储在sharding的各个节点上。
MongoDB提供了auto-sharding 功能。因为其是auto-sharding,即mongodb通过mongos(一个自动分片模块,用于构建一个大规模的可扩展的数据库集群,这个集群可 以并入动态增加的机器)自动建立一个水平扩展的数据库集群系统,将数据库分表存储在sharding的各个节点上。
一个mongodb集群包括一些shards(包括一些mongod进程),mongos路由进程,一个或多个config服务器
下面是一些相关词汇说明:
Shards :每一个shard包括一个或多个服务和存储数据的mongod进程(mongod是MongoDB数据的核心进程)典型的每个shard开启多个服务来提高服务的可用性。这些服务/mongod进程在shard中组成一个复制集
Chunks:Chunk是一个来自特殊集合中的一个数据范围, (collection,minKey,maxKey)描叙一个chunk,它介于minKey和maxKey范围之间。例如chunks 的maxsize大小是100M,如果一个文件达到或超过这个范围时,会被切分到2个新的chunks中。当一个shard的数据过量时,chunks将 会被迁移到其他的shards上。同样,chunks也可以迁移到其他的shards上
Config Servers : Config服务器存储着集群的metadata信息,包括每个服务器,每个shard的基本信息和chunk信息Config服务器主要存储的是chunk信息。每一个config服务器都复制了完整的chunk信息。
今天要介绍的源码主要是Mongos的主入口函数的执行流程,首先我们打开Mongos的项目(可通过打开源码db\db_10.sln加载所有项目),如下图:
注:如果要调试mongos,需要设置一个mongod进程和一个Config Server,形如:
d:\mongodb>bin>mongod –dbpath d:\mongodb\db\ –port 27012
d:\mongodb>bin>mongod –configsvr –dbpath d:\mongodb\db\ –port 27022
然后在vs2010中配置相应的boost路径信息及启动参数信息,如下图:
下面开始正文。首先打开mongos项目中的server.cpp文件,找到下面方法:
int main(int argc, char* argv[]) {… 阅读全文
2013-05-07 categories:
资料 tags:
MongoDB author:
sch
来源:互联网
下面文章转载自火丁笔记,原作者描述了一次MongoDB数据迁移过程中遇到的性能问题及其解决方案,中间追查问题的方法和工具值得我们学习。
下面是其原文:
最近忙着把一个项目从MySQL迁移到MongoDB,在导入旧数据的过程中,遇到了些许波折,犯了不少错误,但同时也学到了不少知识,遂记录下来。
公司为这个项目专门配备了几台高性能务器,清一色的双路四核超线程CPU,外加32G内存,运维人员安装好MongoDB后,就轮到我了,我习惯于在使用新服务器前先看看相关日志,了解一下基本情况,当我浏览MongoDB日志时,发现一些警告信息:
WARNING: You are running on a NUMA machine.
We suggest launching mongod like this to avoid performance problems:
numactl –interleave=all mongod [other options]
当时我并不太清楚NUMA是什么东西,所以没有处理,只是把问题报告给了运维人员,事实证明运维人员也没有处理,所以问题的序幕就这样拉开了…
迁移工作首先要导入旧数据。开始一切倒还正常,不过几小时之后,我无意中发现不知道什么时候开始数据导入的速度下降了,同时我的PHP脚本开始不停的抛出异常:
cursor timed out (timeout: 30000, time left: 0:0, status: 0)… 阅读全文
2013-05-07 categories:
资料 tags:
MongoDB author:
sch
MongDB有个很方便的地方,只打函数的名字而不加括号,就能查看该函数的功能用法:
> db.user.insert
function (obj, _allow_dot) {
if (!obj) {
throw “no object passed to insert!”;
}
if (!_allow_dot) {
this._validateForStorage(obj);
}
if (typeof obj._id == “undefined” && !Array.isArray(obj)) {
var tmp = obj;
obj = {_id:new ObjectId};
for (var … 阅读全文
2013-05-04 categories:
资料 tags:
MongoDB author:
sch
这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建mongodb系统。
分片是指将数据拆分,将其分散存放在不同的机器上的过程。有时也用分区(partitioning)来表示这个概念。
几乎所有数据库软件都能进行手动分片(manual sharding)。应用需要维护与若干不同数据库服务器的连接,每个连接还是完全独立的。应用程序管理不同服务器上不同数据的存储,还管理在合适的数据库上查询数据的工作。
MongoDB支持自动分片(autosharding),可以使数据库架构对应用程序不可见,也可以简化系统管理。mongodb自动处理数据在分片上的分布,也更容易添加和删除分片。
理解集群的组件
Mongodb的分片机制允许你创建一个包含许多台机器(分片)的集群。将数据子集分散在集群中,每个分片维护着一个数据集合的子集。与单个服务器和副本集相比,使用集群架构可以使应用程序具有更大的数据处理能力。
复制是让多台服务器都拥有同样的数据副本,每一台服务器都是其它服务器的镜像,而每一个分片和其它分片拥有不同的数据子集。
为了对应用程序隐藏数据库架构的细节,在分片之前要先执行mongos进行一次路由过程。这个路由服务器维护着一个“内容列表”,指明了每个分片包含什么数据内容。应用程序只需要连接到路由服务器,就可以像使用单机服务器一样进行正常的请求了。路由服务器知道哪些数据位于哪个分片,可以将请求转发给相应的分片。每个分片对请求的响应都会发送给路由服务器,路由服务器将所有响应合并在一起,返回给应用程序。对应用程序来说,它只知道自己是连接到了一台单机mongod服务器。
要构建一个 MongoDB Sharding Cluster,需要三种角色:
Shard Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障
Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。
Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
Sharding架构图:
本例实际环境架构
本例架构示例图:
分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组织replica set1,作为cluster的shard1
1. … 阅读全文
2013-05-04 categories:
资料 tags:
MongoDB , nosql author:
sch
mongodb数据库同样离不开必要的维护,如备份、恢复、导入、导出。
其实备份和恢复比导入和导出要方便些,而且一般不会出错,所以大部分时候使用备份和恢复操作就可以了
1. 备份Mongodb
mongodump -h test.xxxx.com:52000 -d dataname -o /home/aa/dev/mongodb/data
mongodump mongo导出数据库命令 mongodump –help 可以查看该命令下所有的帮助
-h 导出源
-d 要导出的数据库名称
-o 数据库要导出的位置
在终端滚过N行之后,数据库导出完成,可以去/home/aa/dev/mongodb/data 目录下查看导出的文件,bson格式的(我导出后没有马上就看到文件,等了一会才出现的,原因不明)
2. 恢复使用:mongorestore 命令
mongorestore -d cmsdev /home/xx/dev/mongodb/data/cmsdev
-d 使用的数据库名称
后面直接加你刚才导出的目录,这样是直接恢复所有表
如果-c 是恢复一个表
3. 导入
mongoimport -d … 阅读全文
2013-05-04 categories:
资料 tags:
MongoDB author:
sch
1、MongoDB Shell中退格键使用的问题。
利用SecureCRT工具访问linux的时候,在使用MongoDB的交互式shell的时候,退格键(Backspace)无法使用,导致无法修改输入的字符。为这个错误,废了好长时间的力气,终于找到了错误的原因。其实,主要是SecureCRT工具默认的字符输入模式的问题,可以通过以下方式修改:
第一步:选择Option菜单中的Session Option。
第二步:在左侧的目录中选择Terminal—Emulation,在其中的Terminal选项中选择Linux,并点击确定即可。
此问题虽然不大,但会浪费初学者很多时间和精力。因此,写到这里,供大家查看。
secureCRT 使用退格键 (backspace )出现^H解决办法
来源:http://skykiss.blog.51cto.com/2892603/769771
解决办法步骤如下:
选项—》会话选项—》
把下面两个打个钩就行了。
相关文章:
MongoDB基本操作指南
NoSQL数据库
MongoDB集群
MongoDB数据库
MongoDB备份与恢复
8种NoSQL数据库对比
配置mongodb分片群集(sharding cluster)
记一次MongoDB性能问题,附原理解析
mongodb之insert和save函数的区别
mongodb shell无法删除问题 与 secureCRT使用退格键出现^H解决办法
Mongodb源码分析之Mongos分析
PHP操作MongoDB
来源:互联网… 阅读全文
2013-05-03 categories:
资料 tags:
MongoDB , nosql author:
sch
MongoDB集群中包含一个自动分片模块(“mongos”)。自动分片可以用于构建一个大规模的可扩展的数据库集群,这个集群可以并入动态增加的机器。自动建立一个水平扩展的数据库集群系统,将数据库分表存储在sharding的各个节点上。在一个mongodb的集群中包括一些shards(mongod进程),mongos的路由进程,一个或多个config服务器。sharding是一种对大规模数据存储的一种策略,关于sharding的详细信息可以查看这里。也许有人会问,为什么需要做这种策略,因为在一个大型系统中最后的瓶颈会落在网络的带宽和磁盘的读写上,如果将数据分布在多个机器上的多个磁盘上,将会系统数据的处理能有所提高。
MongoDB 集群的结构:
下图中Shard是指每个节点的shard有一个或更多的服务器和存储数据的mongod进程,而mongod是MongoDB数据的核心进程。
每台机器上的mongod从配置获取服务器(元数据metadata),然后,当收到客户端请求时,它请求路由到相应的服务器组和编译结果发送回客户端。
mongos进行可以被看作是一个路由和协调的过程,因为他可以使得每个单一的各个节点组成一个集群系统。另外还需要强调一点mongos进程没有持久状态,每个实例都需要一定的数据存储的内存空间。
换而言之,所谓MongoDB集群也就是MongoDB做了一个数据库路由的策略,而且保证跨库操作的数据库事务,而MongoDB集群中的关键部分Sharding不是一门新技术,而是一种策略,关键还是看应用场景和案例提供的可用性,因为Sharding不仅仅是MongoDB集群中所提到的分布在不同的机器上,还可以分表,分区,分数据,等等。
MongoDB 集群的工作原理:
其中有一个服务器上存储着集群的metadata信息,包括每个服务器,每个shard的基本信息和chunk信息Config Server主要存储的是chunk信息。每一个config服务器都复制了完整的chunk信息,就是下图中左边黄色的部分。
如果客户端对集群的MongoDB插入一条数据,客户端并不知道刚刚插入的数据被分配到具体哪个MongoDB节点上了,因为当一条数据被传入MongoDB集群中通过mongos路由,所以我们并感觉不到是数据存放在哪个shard的chunk上,但是通过后台的Sharding的管理命令可以看到插入的数据存放在哪个节点上。
配置MongoDB集群
模拟2个shard服务、一个config服务、一个mongos process,全部运行在一个测试的服务器上,具体配置步骤如下:
口水:–shardsvr是表示以sharding模式启动Mongodb服务器,Mongodb数据同步方式参见我写的另外一篇文章“MongoDB主(Master)/从(Slave)数据同步”
$ mkdir /data/db/a
$ mkdir /data/db/b
$ mkdir /data/db/config
$ ./mongod –shardsvr –dbpath /data/db/a –port 10000 > /tmp/sharda.log &
$ cat /tmp/sharda.log
$ ./mongod … 阅读全文