MongoDB之数据分布式存储

在MongoDB的世界,做数据分布式存储显得非常简单。只要按照前面介绍的 集群搭建 完成就完全具备了数据分布式存储的要求。

在这里分清几个概念:去前面的文章可以找到介绍

1. 复制集   功能是实现数据备份、灾难恢复,主节点和从节点数据相同。

2. 分片      每个分片由一个或多个复制集构成,功能是数据实现分布。所有分片的数据加起来才构成一个数据库的完整数据。

3. 集群      由1个或多个分片 + Mongos + ConfigServer构成。

当然这这是具备了数据分布式存储的条件。但是真正实现数据分布是需要一个关键因素—"片键"。只有选择合适的片键才能做到数据分布存储。

否则数据仍写在某一个分片上。

例如:选择片键为_id 值为 hashed . 基本实现数据均匀分布。

如果选择时间值为1(升序).数据分片情况基本按时间段去存储。

具体需要怎样去实现数据分布还需要根据业务情况去判定。一个好的片键会提高查询写入等性能。 选择不好的话会严重影响系统性能。希望大家可以慎重选择。

对于片键的选择可以参考下一篇 "如何选择片键"

时间: 2024-08-02 11:03:46

MongoDB之数据分布式存储的相关文章

(转)Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析

Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析 数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求. 二.解决方案: 1.通过高速服务器Cache缓存数据库数据 2.内存数据库 (这里仅从数据缓存方面考虑,当然,后期可以采用Hadoop+HBase+Hive等分布式存储分析平台) 三.主流解Cache和数据库对比: 上述技术基本上代表了当今在数据存储方面所有的实现方案,其中主要涉及到了普通关系型数据库(MySQL/PostgreSQL),NoSQL数据

压缩 MongoDB 的数据文件

MongoDB采用了磁盘空间预分配的机制,为了避免磁盘碎片以及使用mmap后造成的近一步的内存碎片,但是随着数据的增删除改操作,数据文件不可避免的会产生空洞,造成磁盘空间和内存的浪费.本文说的是这方面的压缩,数据使用某些压缩算法进行压缩的讨论不在此范围. 在MongoDB 中,大概有两种方法可以解决这种问题,但是都不是无痛方式,所以并不推荐使用. 1.通过 repairDatabase 整理数据文件 repairDatabase 是MongoDB 内置的一个db 上的方法,调用这个方法,Mong

mongoDB 插入数据 用java实现

import java.net.UnknownHostException; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBObject; import com.mongodb.Mongo; /**  * 用java 往mongoDB插入数据  * @author wwd *  */ public class InsertD

MongoDB丢数据问题的分析

坊间有很多传说MongoDB会丢数据.特别是最近有一个InfoQ翻译的Sven的一篇水文(为什么叫做水文?因为里面并没有他自己的原创,只是搜罗了一些网上的博客,炒了些冷饭吃),其中又提到了丢数据的事情.大家知道作为一个数据库来说,数据的持久性基本上是数据库的最低要求了.如果MongoDB真的有那么糟糕的数据安全问题,它早就在技术选择众多的今天被无情地淘汰掉了.那么真相到底如何呢? 实事求是地来说,MongoDB确实在其发展的过程中,有一些数据持久化的问题没有处理好,特别是一些默认值的选定上.大部

MongoDB的数据复制和数据切片

MongoDB简介 MongoDB由C++开发,是NoSQL中比较接近关系型数据库的一种.MongoDB中的数据以类似于json的格式存储,性能非常优越,且支持大量的数据存储.但是MongoDB不支持事务性的操作,使得其适用场景受到限制. MongoDB副本集 MongoDB的数据复制有两种类型: 1)master/slave 2)replica set 第一种为类似于MySQL的主从复制模型,第二种为副本集复制方式.现在主要应用的为副本集复制模型.结构图如下: 一个副本集即为服务于同一数据集的

Mongodb同步数据到hive(二)

Mongodb同步数据到hive(二) 1.            概述 上一篇文章主要介绍了mongodb-based,通过直连mongodb的方式进行数据映射来进行数据查询,但是那种方式会对线上的数据库产生影响,所以今天介绍第二种方式-BSON-based,即使用mongoexport将所需要的表导出到本地文件,文件个是默认为bson.然后将导出的bson文件put到HDFS文件系统里面,最后在hive里面创建相应的表来使用hive sql进行查询. 2.            导出文件 使

Mongodb中数据聚合之基本聚合函数count、distinct、group

在之前的文章<Mongodb中数据聚合之MapReduce>中,我们提到过Mongodb中进行数据聚合操作的一种方式--MapReduce,但是在大多数日常使用过程中,我们并不需要使用MapReduce来进行操作,不然有点杀鸡用牛刀的感觉,在这边文章中,我们就简单说说用自带的聚合函数进行数据聚合操作的实现. Mongodb中自带的基本聚合函数有三种:count.distinct和group.下面我们分别来讲述一下这三个基本聚合函数. (1)count 作用:简单统计集合中符合某种条件的文档数量

Mongodb中数据聚合之聚合管道aggregate

在之前的两篇文章<Mongodb中数据聚合之基本聚合函数count.distinct.group>和<Mongodb中数据聚合之MapReduce>中,我们已经对数据聚合提供了两种实现方式,今天,在这篇文章中,我们讲讲在Mongodb中的另外一种数据聚合实现方式--聚合管道aggregate. 面对着广大用户对数据统计的需求,Mongodb从2.2版本之后便引入了新的功能聚合框架(aggregation framework),它是数据聚合的新框架,这个概念类似于数据处理中的管道.每

MongoDB group 数据不同字段distinct问题解决办法

近日被mongoDB的聚合难住了,条件: 1.表中有字段mac,pv,ip,dates,type 2.要求,根据ip来group,计算pv合计,不重复的mac数,不重复的ip数 3.下面是解决办法,说明:MongoDB权威指南中使用的是对象,即"macs":{},然后在reduce里面用 in来查找,prev.macs[obj.mac]=""来添加,容易出现Unexpected number错误 现在改成数组,并且在finalize 中清除,感觉很方便 1 db.t