本篇文章直接研究 mongodb 的基本部署方案以及后续在 crm(crm是之前参与的一个数据平台项目) 平台中使用的可行性以及一些实战案例。
【 Mongodb 是什么】
mongodb 由 C ++写就,其名字来自 humongo us 这个单词的中间部分,从名字可见其野心所在就是海量数据的处理。关于它的一个最简洁描述为: scalable, high-performance, open source, schema-free, document-oriented database 。 MongoDB 的主要目标是在键 / 值存储方式(提供了高性能和高度伸缩性)以及传统的 RDBMS 系统(丰富的功能)架起一座桥梁,集两者的优势于一身。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似 json 的 bjson 格式,因此可以存储比较复杂的数据类型。 Mongo 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几 乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
关于概念与特点不说太多,大家可以去线上看,直接进入实战主题。
【 Mongodb 的安装与部署】
1. 需要下载相应的安装包
a) 从 http://www.mongodb.org/downloads 下载,选择合适的版本( linux 或 window 环境,服务器位数等)。本次实战以在 64 位 linux 服务器安装 mongodb 2.0.4 版本为例,目前版本已经到 2.0.6 。
2. 解压下载的安装包
a) tar -xzvf mongodb-linux-i686-2.0.4 .tgz.tar
b) 创建两个目录,分别用于存放数据文件和日志文件
3. 启动 Mongodb
a) 执行启动命令( dbpath 为数据存放文件夹, logpath 为日志产生文件夹)
./mongod --dbpath=/data/mongodb_data/ --logpath=/data/mongodb_log/mongodb.log --logappend &
b) 目前来看百度提供的默认机器版本不支持 mongodb 安装,提示错误:
尝试安装 libstdc++ 失败,可能需要和 infobright 一样需要 redhat 4+ 的版本。到时候上线是个问题
4. Mongodb 启动
a) 可以使用netstat -lanp | grep "27017" 或者ps aux | grep mongod 查看当前进程
b) 在bin 目录下直接执行 ./mongo 进入数据库,下图显示连接成功
【 Mongodb 初探险】
5. Mongodb 的一些概念
a) 可以将 mongodb 当成一般的数据库来看待
b) Mongodb 中每个数据库也有多张表,它的表名称叫做 collection
c) 每个 collection 或者说每张表可以存放多个文档,其实也就是多条记录。 Mongodb 中没有列的概念,它是以 BSON( 可以直接理解为 json) 的形式存放在硬盘中的,因此可以无限拓展存储各种复杂型的数据
d) Mongodb 中没有列的概念,在存储数据时全部以键值对的形式存在,如查看某个 collection 的数据如下,形如 json ,以键值对的形式存在。
6. Mongodb 的一些基本操作
a) 查看数据库:
Show dbs 显示数据库
Use 数据库名 进入某一数据库,当此数据库不存在时, mongodb 会自动化创建
b) 新建 collection :
db.createCollection("collection 名字 ");
c) 插入数据:
db. collection 名字 .insert({_id:"339129_2011-01-09", "userid" : 175, "planid" : 339129, "wordNum" : 2, "showableNum":0})
d) 查询数据:
db. collection 名字 .find() 查看所有记录
db. collection 名字 .findOne() 查看一条记录
db. collection 名字 .find({_id:” 339129_2011-01-09”});db
e) 更新数据:
db. collection 名字 .update({"_id":"53198848_1592759_2010-12-31"},{$set:{"lastOffTime":"2010-12-31 14:30:34"}})
f) 查看 collections 中索引的建立情况
db.collection 名字 .getIndexes()
db.collection 名字 .getIndexKeys()
db. collection 名字 .totalIndexSize() 查看当前 collection 中索引的大小
【 Mongodb 的 JAVA 实战】
1. 要使用 Java 操作 MongoDB 的话,要到官方网站下载一个驱动包,把包导入后,可以尝试来操作了(记得一定要开着服务器)
2. 配置相应的基本参数
3. 连接数据库,并取得 test 这个表的操作对象
4. 插入数据,如上文所述,在 mongodb 中所有的对象都是以键值对的形式存在,而且可以支持字段的无限扩展,类似于一对多关系。且不同的对象与对象之间的列可以不一样。
5. 查询数据
返回单条记录
返回多条记录,那么则会返回一个 DBCursor 对象,类似于 jdbc 中的 resultset 对象
6. 更新数据
注意到更新是以新增列的方式进行的,也就是说它不会改变原有的记录,但是会以新增列的形式加入到该记录中;这个特性在 mysql 中是无法支持的,因为对动态加列的结构有着重大的意义。
【 Mongodb 在 CRM 中的应用可行性探讨】
1. 背景
目前CRM 在从LOG 平台导入数据时,主要有两种类型
一, 纯数值型的数据:针对这种类型的数据目前CRM 的一体化框架可以支持多值的录入,比如查看ting 的pv 、cookie 、UV 等可以在一个任务中配置完成。但缺点是后期扩展性较差,比如需要添加60S 字段的话,则可能需要修改表结构。采用mongodb 的话,由于它的数据存储很方便支持扩展,因此不存在这个问题
二, 文件类型数据:在crm 普遍存在一种数据任务是录多个项目的不同属性值。如查看ting 不同页面的pv 、cookie 等。在log 平台中,统计项的存在是不同页面的pv 是一个统计项,cookie 也是一个统计项;这样子CRM 在入库时必须分开录入,同时在做转换的时候也必须做多种Union (相当于有几个项就有几个Union )。
2. 解决方案
使用mongodb 键值对存储的特性,针对数值型字段,可以以< 日期+ 表名称> 做为key ,针对文件类型的字段,可以以< 日期+ 表名+ 项目> 作为key 。同时参考上述的更新数据方法,即当log 统计项有新数据生成的时候,即往表中添加新的数据。
3. 成本
从mongodb 对java 的支持来看实现成本较低,具体实现相当于在build 任务中添加一个新的任务类型,在transfer 任务中也添加一个任务类型字段。而具体的业务实现参照一般流程的增删改查操作即可。
【 Mongodb 分布式部署】
mongodb 在分布式部署上也有着非常好的支持,主要包括
1. 主从部署
2. 分片部署(类似于数据表分区,但更加强大)
3. 副本集
初步调研在分布式部署上的配置成本也很低(相对于mysql 的主从和分区), 由于初期试用可以暂不考虑这么多,如果后续真的确认在crm 中使用mongodb ,且数据量达到一定程度并影响到性能时候可以考虑扩展。有兴趣的同学也可直接访问 http://www.elain.org/?p=602 查看。
(本文内容由 深圳至善互联 提供)
相关推荐
在《MongoDB实战》第二版中,作者深入浅出地介绍了这个流行的NoSQL数据库系统,特别强调了它在现代Web开发中的重要地位。本章主要涵盖了MongoDB的关键特性,包括它的文档数据模型、查询机制、索引、复制、加速与持久...
[Manning Publications] MongoDB 实战 (英文版) [Manning Publications] MongoDB in Action (E-Book) ☆ 出版信息:☆ [作者信息] Kyle Banker [出版机构] Manning Publications [出版日期] 2011年12月16日 ...
《MongoDB实战》第二版是MongoDB官方团队与业界专家合作撰写的一本权威书籍,针对MongoDB这一NoSQL数据库的实战应用进行了深入讲解。MongoDB因其高并发、高性能、灵活的数据模型、易于扩展和分布式查询支持等优势,...
### 大数据存储MongoDB实战指南1知识点概览 #### 一、MongoDB简介与特点 - **开源性**:MongoDB是一款开源的NoSQL数据库系统,具备高度灵活性和可扩展性。 - **高性能**:它能够高效地处理大规模数据,并提供快速的...
《MongoDB实战》第二版的第4章主要探讨了面向文档的数据模型,特别是针对电商网站开发的实战场景。本章的重点在于Schema设计原则、电商数据模型的构建,以及MongoDB中数据库、集合和文档的组织结构。 首先,Schema...
在《MongoDB实战》第2版的第5章中,作者深入探讨了如何构建和执行查询,特别是在电子商务领域的应用场景。本章主要内容包括理解查询一个电子商务数据模型、MongoDB查询语言的细节、查询选择器及其选项。 MongoDB...
《Node.js + MongoDB实战开发微博系统》 在现代Web开发中,Node.js以其异步非阻塞I/O和高效的性能,已经成为构建实时应用的理想选择。MongoDB作为一个强大的NoSQL数据库,以其灵活的数据模型和高性能,常被用于处理...
在《MongoDB实战》第二版的第二章中,作者主要讲解了如何通过JavaScript Shell操作MongoDB,包括基本的CRUD(创建、读取、更新、删除)操作、构建索引和使用`explain()`方法来优化查询,以及一些基础的数据库管理...
《MongoDB实战》第二版的第6章聚焦于“聚合查询与统计分析”,这是数据库管理和数据分析的关键领域。MongoDB的聚合框架是其高级查询语言的一部分,它允许对数据进行复杂处理,生成在单个文档中不存在的新信息。这一...
《MongoDB实战》第二版的第7章主要讲解了MongoDB中的原子性操作和事务,特别是如何更新和删除文档。本章的内容分为以下几个部分: 1. **文档更新概要**: MongoDB提供了两种更新文档的方式:完全替换文档和使用...
在《MongoDB 实战》这本书中,作者王文龙介绍了如何安装、配置及使用 MongoDB。以下是针对书中的几个关键知识点的详细说明: ### 第一部分 基础篇 #### 第一章 走进 MongoDB 1.1 为什么要用 NoSQL NoSQL(Not ...
MongoDB实战第二版笔记(9)第八章笔记 1、正确设置索引,MongoDB可以高效使用其硬件,并且快速服务查询。而错误索引导致查询减速、写减速、恶化硬件设备使用。【高效使用MongoDB为何要理解索引?】 2、索引...
MongoDB集群实战的知识点包括了MongoDB的基本概念、集群的部署方法以及主从复制模式的实战部署步骤。 首先,我们来看MongoDB的基本概念。MongoDB是一个开源的非关系型数据库,它的特点包括分布式存储、面向文档的...
根据提供的文件信息,我们可以推断出这是一套关于MongoDB的视频教程,由燕十八主讲,包含了21讲的基础教程以及高级实战开发教程。接下来,我们将基于这些信息来生成相关的知识点。 ### MongoDB简介 MongoDB是一种...
数据库资料
在本实战案例中,我们探讨的是如何利用Node.js的Express框架与MongoDB数据库构建一个简易的用户管理系统。这个系统涵盖了数据库的基本操作,如增(添加数据)、删(删除数据)、改(更新数据)和查(查询数据),...
MongoDB是一种NoSQL数据库,它在许多场景下可以替代传统的关系型数据库或键/值存储方式,适用于大数据存储、高并发访问等现代应用场景。 关系型数据库是以关系模型为基础的数据库,其核心组成部分包括关系数据结构...
在本篇内容中,我们将深入探讨“前端 Vue+Node+MongoDB 高级全栈开发”的核心知识点。通过本文的学习,您将能够更好地理解如何利用这些技术构建高效、灵活且可扩展的应用程序。 ### 一、Vue.js简介 **Vue.js** 是...
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像...
MongoDB实战与Redis实战是两个重要的数据库技术主题,它们在现代数据存储和处理领域占据了显著的位置。MongoDB是一种流行的文档型数据库,而Redis则是一款高效的数据结构存储系统,常用于缓存、消息队列等场景。 ...