本篇接着上面的四篇继续讲述在window平台下mongodb的分片集群搭建。在分片集群中也照样可以创建索引,创建索引的方式与在单独数据库中创建索引的方式一样。因此这不再多说。本篇主要聚焦在分片键的选取问题上。 分片键通俗来说就是分割海量数据的标记符。 如
本篇接着上面的四篇继续讲述在window平台下mongodb的分片集群搭建。在分片集群中也照样可以创建索引,创建索引的方式与在单独数据库中创建索引的方式一样。因此这不再多说。本篇主要聚焦在分片键的选取问题上。
分片键通俗来说就是分割海量数据的标记符。 如果更高效的划分海量数据往往依赖于分片键的选择。 分片键选得不好,应用程序就无法利用分片集群所提供的诸多优势。在这种情况下,查询和插入得系能都回显著下降。
一、低效的分片键
1.1 分布差
BSON对象ID是每个mongodb文档的默认主键。所有的对象ID最重要的组成部分是时间戳,也就是说对象ID是升序的,遗憾的是升序对于分片键来说是很糟糕的。由于分片是基于范围的。使用升序的分片键后,所有最近插入的文档会落在某个很小的连续范围内。如果想让插入负载分不到多个分片上,就不能使用升序分片键,应需某些随机性更强发的的东西。
1.2 缺乏局部性
升序分片键由明确的方向,完全随机的分片键根部没有方向。前者无法分散插入,而后者则可能将插入分散太慢。假设分片集合中每个文档都包含一个MD5,而MD5字段就是分片键。因为MD5随着文档的不同而进行变化。所有该分片键能确保插入的文档均匀分布在集群的分片上。但是有个问题,对于每个分片的MD5字段索引进行的插入过程中,索引中每个虚拟内存分页都有可能被访问到。这就意外着有可能所有的索引和数据都装在内存中。从而超出了物理内存。3. 无法拆分的块
随机分片键和升序分片键都不好用,那么就尝试一下粗粒度分片键。举个例子,例如用户Id上传了100张照片,那么分片键就是用户ID,第一原因对于每张照片来说具有随机性,同时可以通过局部性引用来提升效率。但有个问题就是当用户ID上传的照片太大时候,以至于不得不分块。而系统又不能把一个用户的照片拆分成多个快。二、理想的分片键
通过上面分析,理想的分片键应该满足:1. 将插入数据均匀分布到各个分片上 2.保证crud操作能够利用局部性 3. 有足够的粒度进行块划分
举个例子:创建一个网站分析系统,一个不错的数据模型就是每个网页每月保存一个文档,随后在那个文档中保持该月每天的数据,每次访问某个页面增加一些计数器字段。下面是于分片键有关的实例分析文档:
{ _id: objectId("34535353245eraf32223sdarwe") domin:"org.mongod" url:"download" perid:"2011-12" }
最简单的分片就是包含每个网页的域名,随后是url{domain:1, url:1}所有来自指定域的页面通常都落在一个分片上,但是一些特殊的域拥有大量页面,在必要时候仍会被拆分到分片上。
备注:本篇内容大多引自《MongoDB in action》 Kyle Banker著

mongodb php扩展没有的解决办法:1、在linux中执行“$ sudo pecl install mongo”命令来安装MongoDB的PHP扩展驱动;2、在window中,下载php mongodb驱动二进制包,然后在“php.ini”文件中配置“extension=php_mongo.dll”即可。

Redis和MongoDB都是流行的开源NoSQL数据库,但它们的设计理念和使用场景有所不同。本文将重点介绍Redis和MongoDB的区别和使用场景。Redis和MongoDB简介Redis是一个高性能的数据存储系统,常被用作缓存和消息中间件。Redis以内存为主要存储介质,但它也支持将数据持久化到磁盘上。Redis是一款键值数据库,它支持多种数据结构(例

MongoDB是一种高性能、开源、文档型的NoSQL数据库,被广泛应用于Web应用、大数据以及云计算领域。而Go语言则是一种快速、开发效率高、代码可维护性强的编程语言。本文将为您完整介绍如何在Go语言中使用MongoDB。一、安装MongoDB在使用MongoDB之前,需要先在您的系统中安装MongoDB。在Linux系统下,可以通过如下命令安装:sudo

php7.0安装mongo扩展的方法:1、创建mongodb用户组和用户;2、下载mongodb源码包,并将源码包放到“/usr/local/src/”目录下;3、进入“src/”目录;4、解压源码包;5、创建mongodb文件目录;6、将文件复制到“mongodb/”目录;7、创建mongodb配置文件并修改配置即可。

MongoDB作为一款流行的NoSQL数据库,已经被广泛应用于各种大型Web应用和企业级应用中。而PHP语言也作为一种流行的Web编程语言,与MongoDB的结合也变得越来越重要。在本文中,我们将会学习如何使用PHP语言操作MongoDB数据库进行增删查改的操作。

自定义Appender非常简单,继承一下AppenderBase类即可。可以看到有个AppenderBase,有个UnsynchronizedAppenderBase,还有个AsyncAppenderBase继承了UnsynchronizedAppenderBase。从名字就能看出来区别,异步的、普通的、不加锁的。我们定义一个MongoDBAppender继承UnsynchronizedAppenderBasepublicclassMongoDBAppenderextendsUnsynchron

在现代企业应用程序开发中,需要处理海量数据和高并发的访问请求。为了满足这些需求,开发人员需要使用高性能的数据库系统,以确保系统的稳定性和可扩展性。本文将介绍如何使用Swoole和MongoDB构建高性能的文档数据库系统。Swoole是一个基于PHP语言开发的异步网络通信框架,它能够大大提高PHP应用程序的性能和并发能力。MongoDB是一种流行的文档数据库,

一、什么是MongoDBMongoDB与我们之前熟知的关系型数据库(MySQL、Oracle)不同,MongoDB是一个文档数据库,它具有所需的可伸缩性和灵活性,以及所需的查询和索引。MongoDB将数据存储在灵活的、类似JSON的文档中,这意味着文档的字段可能因文档而异,数据结构也会随着时间的推移而改变。文档模型映射到应用程序代码中的对象,使数据易于处理。MongoDB是一个以分布式数据库为核心的数据库,因此高可用性、横向扩展和地理分布是内置的,并且易于使用。况且,MongoDB是免费的,开源


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

드림위버 CS6
시각적 웹 개발 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구
