永利皇宫登录网址:MongoDB介绍及安装,作为PHP程

2019-06-29 03:42栏目:区块链
TAG:

随着加密货币及区块链技术日益火爆,区块链的可扩展性逐渐成为制约其应用落地的痛点之一,2017年引爆加密世界的加密猫游戏就曾让以太坊网络濒临瘫痪。

目录:ASP.NET MVC企业级实战目录

目录:ASP.NET MVC企业级实战目录

2010年应该被人们记住,因为SQL将在这一年死去。这一年关系数据库行将就木,这一年开发者发现他们再不需要长时间辛苦的构造列或者表格来存放数据。
2010年将是文档型数据库的起始年。尽管这样的势头已经持续多年,现在才是一个更多,更广泛的文档型数据库出现的年代。从基于云计算的Amazon到Google,大量开源工具,以及随之诞生的CouchDB和MongoDB。
**那么什么是MongoDB?下面有五件事是PHP开发者应该了解的:

尽管目前各行各业的去中心化应用如雨后春笋一般持续涌现,但其性能问题一直是未能突破的瓶颈,仍然存在应用场景受限、可扩展性不强等问题。当下,就连V神也是三句话离不开可扩展性话题。

一、前言

  最近开始学习非关系型数据库MongoDB,却在博客园上找不到比较系统的教程,很多资料都要去查阅英文网站,效率比较低下。本人不才,借着自学的机会把心得体会都记录下来,方便感兴趣的童鞋分享讨论。部分资源出自其他博客,旨将零散知识点集中到一起,如果有侵犯您的权利,请联系li-pan2@163.com。大部分内容均系原创,欢迎大家转载分享,但转载的同时别忘了注明作者和原文链接哦。

MongoDB简介

MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。

传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库 (database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没 有列、行和关系概念,这体现了模式自由的特点。

特点:高性能、易部署、易使用,存储数据非常方便。

主要功能特性有:

  • 面向集合存储,易存储对象类型的数据。
  • 模式自由。
  • 支持动态查询。
  • 支持完全索引,包含内部对象。
  • 支持查询。
  • 支持复制和故障恢复。
  • 使用高效的二进制数据存储,包括大型对象(如视频等)。
  • 自动处理碎片,以支持云计算层次的扩展性
  • 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C 语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序。
  • 文件存储格式为BSON(一种JSON的扩展)。
  • 可通过网络访问。

  功能:

  • 面向集合的存储:适合存储对象及JSON形式的数据。
  • 动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • 完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
  • 查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。
  • 复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
  • 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
  • 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。

  适用场合:

  • 网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
  • 缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。
  • 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
  • 高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
  • 用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。

MongoDB简介

MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。

传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库 (database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没 有列、行和关系概念,这体现了模式自由的特点。

特点:高性能、易部署、易使用,存储数据非常方便。

主要功能特性有:

  • 面向集合存储,易存储对象类型的数据。
  • 模式自由。
  • 支持动态查询。
  • 支持完全索引,包含内部对象。
  • 支持查询。
  • 支持复制和故障恢复。
  • 使用高效的二进制数据存储,包括大型对象(如视频等)。
  • 自动处理碎片,以支持云计算层次的扩展性
  • 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C 语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序。
  • 文件存储格式为BSON(一种JSON的扩展)。
  • 可通过网络访问。

  功能:

  • 面向集合的存储:适合存储对象及JSON形式的数据。
  • 动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • 完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
  • 查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。
  • 复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
  • 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
  • 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。

  适用场合:

  • 网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
  • 缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。
  • 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
  • 高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
  • 用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。
  1. MongoDB是一个单独的服务器;
  2. MongoDB是基于文档,而不是基于表;
  3. MongoDB中较少的Schema;
  4. 你不需要学习另外的语言;
  5. MongoDB有良好的PHP支持。
    **1. MongoDB是一个单独的服务器
    就像MySQL和PostgreSQL一样,MongoDB将监听接入的链接。它提供的工具作用包括询问,创建,更新和删除。理论上,你将跟在MySQL和PostgreSQL一样的进行工作:链接,处理,然后再关闭链接。
  6. 向行和表说再见,欢迎文档和收集器
    代替储存数据的表和行,MongoDB将数据储存在文档中。假如我们有一篇带标题的“文章”,它有多个作者,一个主题和标签。所有这些看起来就像下面:

而与之相对的中心化机构 Coinbase 交易所,虽然在2017年也曾受平台扩展性瓶颈影响而导致大规模故障停机,但自此以后,尽管数字货币交易人群不断暴增、交易请求数量呈指数增长,但 Coinbase 平台貌似并没有再受扩展性问题的影响,持续、稳定地运行着,令人差异,他们是如何做到的?

二、MongoDB简介

  MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。Mongo使用C 开发。Mongo的官方网站地址是:

小插曲:什么是NoSql?

  NoSql,全称是 Not Only Sql,指的是非关系型的数据库。下一代数据库主要解决几个要点:非关系型的、分布式的、开源的、水平可扩展的。原始的目的是为了大规模web应用,这场运动开始于2009年初,通常特性应用如:模式自由、支持简易复制、简单的API、最终的一致性(非ACID)、大容量数据等。NoSQL被我们用得最多的当数key-value存储,当然还有其他的文档型的、列存储、图型数据库、xml数据库等。

  特点:

  高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

  • 面向集合存储,易存储对象类型的数据。
  • 模式自由。
  • 支持动态查询。
  • 支持完全索引,包含内部对象。
  • 支持查询。
  • 支持复制和故障恢复。
  • 使用高效的二进制数据存储,包括大型对象(如视频等)。
  • 自动处理碎片,以支持云计算层次的扩展性
  • 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C 语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序。
  • 文件存储格式为BSON(一种JSON的扩展)。
  • 可通过网络访问。

  功能:

  • 面向集合的存储:适合存储对象及JSON形式的数据。
  • 动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • 完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
  • 查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。
  • 复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
  • 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
  • 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。

  适用场合:

  • 网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
  • 缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源 过载。
  • 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
  • 高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
  • 用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。

9.6.2 下载安装和配置

1. 下载MongoDB 安装包

官方最新版下载地址:

其它版本下载地址:,

注意:虽然目前最新版本是3.2.6,但是笔者试了十余款MongoDb可视化工具连接3.2.6版本,使用起来都会有问题,所以笔者在这里使用比较低的3.0.7版本。这也告诉我们一个经验:在进行技术选型的时候,不要追求最新的,而应当选择既能满足需求又运行非常稳定的。因为最新的技术,不但相关资料少,而且也没有经过项目的实际验证。学习成本很高,风险大。

当然,在这里,如果你不需要使用可视化客户端工具,使用最新的Mongodb版本进行操作是没有任何问题的。

笔者下载的版本如图9-51所示。

永利皇宫登录网址 1

图9-51

2. Windows下安装MongoDB

下载安装包后,进行安装,默认会把MongoDB安装在目录C:Program FilesMongoDB中。

查看C:Program FilesMongoDBServer3.0bin目录,如下图9-52所示。

永利皇宫登录网址 2 

图9-52

mongod.exe 是用来连接到mongo数据库服务器的,即服务器端。

mongo.exe 是用来启动MongoDB shell的,即客户端。

其他文件:

Mongodump.exe:逻辑备份工具。

mongorestore.exe:逻辑恢复工具。

mongoexport.exe:数据导出工具。

mongoimport.exe:数据导入工具。

(1)配置MongoDB环境

在目录D:WorkSpacemongodb下新建data文件夹,data文件夹将会作为数据存放的根文件夹。

(2)以管理员身份运行CMD。分别执行如下2条CMD命令:

cd Program FilesMongoDBServer3.0bin
mongod.exe --dbpath D:WorkSpacemongodbdata

注意:最后一行命令中的-dbpath 参数值就是我们第一步新建的文件夹。这个文件夹一定要在开启服务之前事先建立好,否则会报错,因为mongodb不会自己创建此文件夹。

命令执行成功后会看到如下所示。

C:Windowssystem32>cd Program FilesMongoDBServer3.0bin

C:Program FilesMongoDBServer3.0bin>mongod.exe --dbpath D:WorkSpacemongodbdata
2016-06-04T00:00:00.153 0800 I JOURNAL  [initandlisten] journal dir=D:WorkSpacemongodbdatajournal
2016-06-04T00:00:00.155 0800 I JOURNAL  [initandlisten] recover : no journal files present, no recovery needed
2016-06-04T00:00:00.224 0800 I JOURNAL  [durability] Durability thread started
2016-06-04T00:00:00.224 0800 I JOURNAL  [journal writer] Journal writer thread started
2016-06-04T00:00:00.323 0800 I CONTROL  [initandlisten] MongoDB starting : pid=4392 port=27017 dbpath=D:WorkSpacemongodbdata 64-bit host=DESKTOP-V7CFIC3
2016-06-04T00:00:00.324 0800 I CONTROL  [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2
2016-06-04T00:00:00.324 0800 I CONTROL  [initandlisten] db version v3.0.7
2016-06-04T00:00:00.324 0800 I CONTROL  [initandlisten] git version: 6ce7cbe8c6b899552dadd907604559806aa2e9bd
2016-06-04T00:00:00.324 0800 I CONTROL  [initandlisten] build info: windows sys.getwindowsversion(major=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1') BOOST_LIB_VERSION=1_49
2016-06-04T00:00:00.324 0800 I CONTROL  [initandlisten] allocator: tcmalloc
2016-06-04T00:00:00.324 0800 I CONTROL  [initandlisten] options: { storage: { dbPath: "D:WorkSpacemongodbdata" } }
2016-06-04T00:00:00.326 0800 I INDEX    [initandlisten] allocating new ns file D:WorkSpacemongodbdatalocal.ns, filling with zeroes...
2016-06-04T00:00:00.586 0800 I STORAGE  [FileAllocator] allocating new datafile D:WorkSpacemongodbdatalocal.0, filling with zeroes...
2016-06-04T00:00:00.589 0800 I STORAGE  [FileAllocator] creating directory D:WorkSpacemongodbdata_tmp
2016-06-04T00:00:00.597 0800 I STORAGE  [FileAllocator] done allocating datafile D:WorkSpacemongodbdatalocal.0, size: 64MB,  took 0.004 secs
2016-06-04T00:00:00.623 0800 I NETWORK  [initandlisten] waiting for connections on port 27017

(3)在浏览器输入:

It looks like you are trying to access MongoDB over HTTP on the native driver port.

说明MongoDB数据库服务已经成功启动了。

(4)再次查看D:WorkSpacemongodbdata文件夹,你会发现data目录下面多了许多文件。如下图9-53所示。

永利皇宫登录网址 3 

图9-53

每次都使用CMD命令来开启mongodb服务端和客户端十分麻烦,我们完全可以把他服务端做成服务,设置开机自启动,然后客户端可以网上下载可视化客户端管理工具。这里我分别演示将其都做成批处理命令和服务。

Mongodb服务端

(1)做成批处理

新建文本文件mongodb_server.txt,输入如下文本:

@echo off
start cmd /k "cd/d C:Program FilesMongoDBServer3.0bin&&mongod --dbpath D:WorkSpacemongodbdata"

然后修改文件后缀名称为bat,最终文件全名为mongodb_server.bat。

(2)做成Windows服务

安装服务:新建文本文件mongodb_server_ Installer.txt,输入如下文本,然后另存为为.bat文件。

@echo off
echo 正在安装服务MongoDB...
start cmd /k "cd/d C:Program FilesMongoDBServer3.0bin&&mongod --install --serviceName MongoDB -serviceDisplayName MongoDB --logpath D:WorkSpacemongodblogMongoDB.Log  --dbpath D:WorkSpacemongodbdata
echo 服务MongoDB安装成功...
echo 正在停止服务...
net start MongoDB
echo 按任意键退出...
pause启动服务:net start MongoDB

以管理员身份运行mongodb_server_ Installer.bat。

卸载服务:新建文本文件mongodb_server_ UnInstaller.txt,输入如下文本,然后另存为为.bat文件。

echo 正在停止服务...
net stop MongoDB
echo 正在删除服务...
sc delete MongoDB
echo 按任意键退出...
pause

以管理员身份运行mongodb_server_ UnInstaller.bat。

Mongodb客户端

新建文本文件mongodb_client.txt,输入如下文本:

@echo off
start cmd /k "cd/d C:Program FilesMongoDBServer3.0bin&&mongo"

然后修改文件后缀名称为bat,最终文件全名为mongodb_client.bat。

以后需要启动的时候,就可以直接双击批处理命令运行了。

9.6.2 下载安装和配置

1. 下载MongoDB 安装包

官方最新版下载地址:

其它版本下载地址:,

注意:虽然目前最新版本是3.2.6,但是笔者试了十余款MongoDb可视化工具连接3.2.6版本,使用起来都会有问题,所以笔者在这里使用比较低的3.0.7版本。这也告诉我们一个经验:在进行技术选型的时候,不要追求最新的,而应当选择既能满足需求又运行非常稳定的。因为最新的技术,不但相关资料少,而且也没有经过项目的实际验证。学习成本很高,风险大。

当然,在这里,如果你不需要使用可视化客户端工具,使用最新的Mongodb版本进行操作是没有任何问题的。

笔者下载的版本如图9-51所示。

永利皇宫登录网址 4

图9-51

2. Windows下安装MongoDB

下载安装包后,进行安装,默认会把MongoDB安装在目录C:Program FilesMongoDB中。

查看C:Program FilesMongoDBServer3.0bin目录,如下图9-52所示。

永利皇宫登录网址 5 

图9-52

mongod.exe 是用来连接到mongo数据库服务器的,即服务器端。

mongo.exe 是用来启动MongoDB shell的,即客户端。

其他文件:

Mongodump.exe:逻辑备份工具。

mongorestore.exe:逻辑恢复工具。

mongoexport.exe:数据导出工具。

mongoimport.exe:数据导入工具。

(1)配置MongoDB环境

在目录D:WorkSpacemongodb下新建data文件夹,data文件夹将会作为数据存放的根文件夹。

(2)以管理员身份运行CMD。分别执行如下2条CMD命令:

cd Program FilesMongoDBServer3.0bin
mongod.exe --dbpath D:WorkSpacemongodbdata

注意:最后一行命令中的-dbpath 参数值就是我们第一步新建的文件夹。这个文件夹一定要在开启服务之前事先建立好,否则会报错,因为mongodb不会自己创建此文件夹。

命令执行成功后会看到如下所示。

C:Windowssystem32>cd Program FilesMongoDBServer3.0bin

C:Program FilesMongoDBServer3.0bin>mongod.exe --dbpath D:WorkSpacemongodbdata
2016-06-04T00:00:00.153 0800 I JOURNAL  [initandlisten] journal dir=D:WorkSpacemongodbdatajournal
2016-06-04T00:00:00.155 0800 I JOURNAL  [initandlisten] recover : no journal files present, no recovery needed
2016-06-04T00:00:00.224 0800 I JOURNAL  [durability] Durability thread started
2016-06-04T00:00:00.224 0800 I JOURNAL  [journal writer] Journal writer thread started
2016-06-04T00:00:00.323 0800 I CONTROL  [initandlisten] MongoDB starting : pid=4392 port=27017 dbpath=D:WorkSpacemongodbdata 64-bit host=DESKTOP-V7CFIC3
2016-06-04T00:00:00.324 0800 I CONTROL  [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2
2016-06-04T00:00:00.324 0800 I CONTROL  [initandlisten] db version v3.0.7
2016-06-04T00:00:00.324 0800 I CONTROL  [initandlisten] git version: 6ce7cbe8c6b899552dadd907604559806aa2e9bd
2016-06-04T00:00:00.324 0800 I CONTROL  [initandlisten] build info: windows sys.getwindowsversion(major=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1') BOOST_LIB_VERSION=1_49
2016-06-04T00:00:00.324 0800 I CONTROL  [initandlisten] allocator: tcmalloc
2016-06-04T00:00:00.324 0800 I CONTROL  [initandlisten] options: { storage: { dbPath: "D:WorkSpacemongodbdata" } }
2016-06-04T00:00:00.326 0800 I INDEX    [initandlisten] allocating new ns file D:WorkSpacemongodbdatalocal.ns, filling with zeroes...
2016-06-04T00:00:00.586 0800 I STORAGE  [FileAllocator] allocating new datafile D:WorkSpacemongodbdatalocal.0, filling with zeroes...
2016-06-04T00:00:00.589 0800 I STORAGE  [FileAllocator] creating directory D:WorkSpacemongodbdata_tmp
2016-06-04T00:00:00.597 0800 I STORAGE  [FileAllocator] done allocating datafile D:WorkSpacemongodbdatalocal.0, size: 64MB,  took 0.004 secs
2016-06-04T00:00:00.623 0800 I NETWORK  [initandlisten] waiting for connections on port 27017

(3)在浏览器输入:

It looks like you are trying to access MongoDB over HTTP on the native driver port.

说明MongoDB数据库服务已经成功启动了。

(4)再次查看D:WorkSpacemongodbdata文件夹,你会发现data目录下面多了许多文件。如下图9-53所示。

永利皇宫登录网址 6 

图9-53

每次都使用CMD命令来开启mongodb服务端和客户端十分麻烦,我们完全可以把他服务端做成服务,设置开机自启动,然后客户端可以网上下载可视化客户端管理工具。这里我分别演示将其都做成批处理命令和服务。

Mongodb服务端

(1)做成批处理

新建文本文件mongodb_server.txt,输入如下文本:

@echo off
start cmd /k "cd/d C:Program FilesMongoDBServer3.0bin&&mongod --dbpath D:WorkSpacemongodbdata"

然后修改文件后缀名称为bat,最终文件全名为mongodb_server.bat。

(2)做成Windows服务

安装服务:新建文本文件mongodb_server_ Installer.txt,输入如下文本,然后另存为为.bat文件。

@echo off
echo 正在安装服务MongoDB...
start cmd /k "cd/d C:Program FilesMongoDBServer3.0bin&&mongod --install --serviceName MongoDB -serviceDisplayName MongoDB --logpath D:WorkSpacemongodblogMongoDB.Log  --dbpath D:WorkSpacemongodbdata
echo 服务MongoDB安装成功...
echo 正在停止服务...
net start MongoDB
echo 按任意键退出...
pause启动服务:net start MongoDB

以管理员身份运行mongodb_server_ Installer.bat。

卸载服务:新建文本文件mongodb_server_ UnInstaller.txt,输入如下文本,然后另存为为.bat文件。

echo 正在停止服务...
net stop MongoDB
echo 正在删除服务...
sc delete MongoDB
echo 按任意键退出...
pause

以管理员身份运行mongodb_server_ UnInstaller.bat。

Mongodb客户端

新建文本文件mongodb_client.txt,输入如下文本:

@echo off
start cmd /k "cd/d C:Program FilesMongoDBServer3.0bin&&mongo"

然后修改文件后缀名称为bat,最终文件全名为mongodb_client.bat。

以后需要启动的时候,就可以直接双击批处理命令运行了。

复制代码 代码如下:

近日,Coinbase 的大牛工程师 Luke Demi 发文总结了平台去年故障停机的经验与教训,并详细介绍了其平台的可扩展性解决方案。

三、下载安装和配置

  安装Mongo数据库:

  在发布本文的时间官方提供的最新版本是:1.6.5 ,如果不做特殊声明,本教程所用的版本将会是这个版本。

  1. 第一步:下载安装包:官方下载地址←单击此处,如果是win系统,注意是64位还是32位版本的,请选择正确的版本。
  2. 第二步:新建目录“D:MongoDB”,解压下载到的安装包,找到bin目录下面全部.exe文件,拷贝到刚创建的目录下。
  3. 第三步:在“D:MongoDB”目录下新建“data”文件夹,它将会作为数据存放的根文件夹。

  配置Mongo服务端:

  打开CMD窗口,按照如下方式输入命令:
  > d:
  > cd D:MongoDB
  > mongod --dbpath D:MongoDBdata

  配置成功后会看到如下画面:
 永利皇宫登录网址 7

永利皇宫登录网址,  在浏览器输入:
You are trying to access MongoDB on the native driver port. For http diagnostic access, add 1000 to the port number

  如此,MongoDB数据库服务已经成功启动了。

array(
'title'=>'Hello World',
'authors'=>array('John','Sally','Jim'),
'body'=>'Hello world',
'tags'=>array('tag1','tag2','tag3')
);
?>

永利皇宫登录网址 8

四、后记

  现在我们已经初步实现了MongoDB的安装和服务的启动工作。后面我们还有很多的工作,要使MongoDB能在我们的C#代码中被操作,还需要驱动,经常有朋友在网上copy代码后发现编译不通过,那估计是驱动不一致的问题了,下篇文章会详细讲解,未完待续。。

上面的例子中最关键的就是那一条记录——这篇文档——是的,确实存储起来就像是一篇文档,支持复合形式的值存储在同一区域。不再需要结构化,不需要将数据按照表来区分。因此,表已经不存在了。

那么,Coinbase 团队是如何应对2017年突增的平台交易量?之后又是如何逐步扩展平台容纳量、持续稳定运行呢?其扩展性解决方案在去中心化应用领域是否有借鉴意义?接下来,听 Luke Demi 讲述 Coinbase 平台背后的故事!

  1. MongoDB包含较少的schema
    MongoDB没有schema语言。如果你想新建一种文档类型,你不需要告诉数据库任何事情。尽管将新的数据放到数据库中就行了。
    在第二点中,我模拟了一个文档。现在我想为所有区域定义一个文章类型,所有我需要做的就是将这些数据写到数据库中。如果我决定延缓写入呢?我只需要拉出这部分数据,然后加上日期字段,最后保存就行。
    永利皇宫登录网址:MongoDB介绍及安装,作为PHP程序员应该了解MongoDB的五件事。那么数据类型怎么办?简单的回答就是MongoDB运用一种强制系统,类似JavaScript或者PHP。如此这样,数据库极好的弱化了类型的作用。
    这有一些漏洞(超大量的数据需要一些明确的定义),不过多数情况下,你写你的MongoDB代码就像在PHP上编程一样。
  2. 你不需要学习另外的语言
    回忆一下其他你曾写过的数据库抽象层。回忆所有你曾使用过的ORM层。那么你现在可以抛弃他们的,在MongoDB上你用不着他们了。
    MongoDB(包含它的PHP驱动)不需要询问语言。在大多数案例中,你只需要简单的给定一个指针具体制定你需要的,然后返回你一个文档指向。
    如果你运行一些高阶函数(比如Map-Reduce),你可以通过JavaScript应用加入到MongoDB中去,并且在JavaScript内部引擎中运行这些脚本。
  3. PHP和MongoDB是天生一对?
    PHP已经对MongoDB具备很好的支持。Mongo驱动可以作为一个PECL加载项加入到PHP,这意味着安装起来就像运行PECL一样安装Mongo。
    看到这里,你可以开始编写Mongo的API了。更广一些说,它和PDO排在一起。不是简单的消亡,但是绝对不同于我们之前开发过的数据库。
    API的说明文档将包括一个引导和许多例子,这样你就可以在短时间内自举。下面将是对你十分有用的提示。
    MongoDB发展非常快。 开发时间非常短,没有过多的模式来管理,很少(如果有的话)的数据映射。
    因为没有新的查询语言要学习,代码的调整很小。毕竟,你不需要另外的ORM,封包也非常轻。
    你的代码是未来的保证,可以更轻松的为你的对象增加更多的领域,甚至是更复杂的领域。因此你的代码可以很轻松的适应需求的变化。
    延伸阅读 Mongo是一个高性能,开源,无模式的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。Mongo使用C 开发,提供了以下功能:
    面向集合的存储:适合存储对象及JSON形式的数据。
    动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
    完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
    查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。
    复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
    高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)。
    自动分片以支持云级别的伸缩性(处于早期alpha阶段):自动分片功能支持水平的数据库集群,可动态添加额外的机器。
    MongoDB的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。根据官方网站的描述,Mongo适合用于以下场景:
    网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
    缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。
    大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
    高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
    用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。
    自然,MongoDB的使用也会有一些限制,例如它不适合:
    高度事务性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
    传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
    需要SQL的问题。 MongoDB支持OS X、Linux及Windows等操作系统,并提供了Python,PHP,Ruby,Java及C 语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序。

2017年,加密货币市场经历了井喷式增长,整个加密货币生态系统的总市值从200亿美元跃升至6000亿美元。

您可能感兴趣的文章:

  • PHP7之Mongodb API使用详解
  • 在php7中MongoDB实现模糊查询的方法详解
  • centos7 php7 lamp全套最新版本配置及mongodb和redis教程详解
  • php7安装mongoDB扩展的方法分析
  • PHP中MongoDB数据库的连接、添加、修改、查询、删除等操作实例
  • 解析PHP中常见的mongodb查询操作
  • php操作MongoDB基础教程(连接、新增、修改、删除、查询)
  • Thinkphp使用mongodb数据库实现多条件查询方法
  • php对mongodb的扩展(初出茅庐)
  • PHP实现的MongoDB数据库操作类分享
  • PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】

在此期间,在中心化交易所 Coinbase 平台之上,几乎所有技术组件都经历了残酷的实战考验。

实践证明,在保障平台的安全性之外,其可靠性和可扩展性也是不容忽视的。

在2018年的 MongoDB 社区大会中,包括 Luke Demi 在内的 Coinbase 工程师都谈到了2017年的经验和教训,以及此后如何增加平台扩展性的解决方案。

2017年的经验教训

2016年,也就是加密货币市场井喷的前一年,Coinbase平台的交易量基本恒定。

在2017年首次爆发之前,Coinbase 团队就用表示四到五倍平台每日最大交易量的红线来标示出预计的平台交易量,即每分钟大约100000个后端API请求。

永利皇宫登录网址 92016年以太币价格飙升之前平台每分钟后端API请求的数量

然而,在2017年5月和6月,随着以太币价格的飙升,平台的交易量也随之猛涨并超越了红线。

在此期间,平台的交易量持续超越了事先预定的红线,导致 Coinbase 平台出现了一段时间的故障停机。

永利皇宫登录网址 10在2017年的交易量开始井喷的早期,每分钟平台后端API请求的数量

为了快速解决 Coinbase 平台的可扩展性问题,工程师团队先从平台环境中常规的、容易实现的技术点进行了改进。

团队对平台进行垂直扩展,为改进其性能及优化检索过程升级数据库版本,此外,还将热点数据库集群拆分为单独数据库集群等。

经过以上方法改进,Coinbase 平台压力暂时得以缓解,但随着时间流逝,交易量总在持续攀升,平台断断续续出现了很多次故障。

每次故障停机的模式都是相同的:主监控平台会显示100倍的延迟峰值,Ruby 和 MongoDB 延迟时间各是50倍。

作为 Coinbase 的主要数据存储区,MongoDB 在数据流量大的时候会出现高延迟,而 Ruby 延迟时间并没有增加。

永利皇宫登录网址 11

在早期的监控系统中,这就是“幽灵”出现的方式

Coinbase 已有的监控工具无法为当时遇到的一些关键问题提供明确的答案,我们把这个现象称为“幽灵”。

比如,这些查询操作来自哪里? 这些操作是怎么回事? 为什么Ruby时间显示出相关的峰值? 问题可能源于应用程序方面吗?

简而言之,团队现有的监控服务并没有完全利用 Coinbase 平台环境中的可用信息。

因此,需要一个框架来回答这些问题并可视化 Coinbase 环境组件之间的关系。

团队通过修改 MongoDB 的数据库驱动程序来进一步改进数据库的查询操作。

修改后的数据库驱动程序会记录超过特定响应时间阈值的所有查询操作,以及请求/响应大小、响应时间、源代码和查询类型等重要信息。

永利皇宫登录网址 12所有慢速MongoDB查询操作中记录的重要信息

这些改进提供的详细数据使团队能够快速找到一些故障停机期间的异常特征,甚至在非故障停机期间也可以。

第一个主要异常是查找设备操作的响应信息数据量过大。

当用户登录网站购买加密货币或查看相关信息时,大量的查询会导致过重的网络负载。

永利皇宫登录网址 13

造成响应信息数据量过大的原因是当时用户和设备之间为多对多关系。

例如,一些用户可能拥有多个设备,而某些设备可能由多名用户共用。 糟糕的设备指纹(用于标定设备)识别算法将大量用户置于同一设备中,从而导致单个设备拥有大量 user_id 对象。

永利皇宫登录网址 14

为了解决这个问题,Coinbase 团队将这种多对多关系重构为简单的一对多关系,其中每个设备只映射到一个用户。

这个改进为 Coinbase 平台带来了2017年最大的一次性能提升。

永利皇宫登录网址 15

这一发现说明了良好监控平台的作用。

在精心改进我们的数据库查询操作之前,这几乎是不可能实现的调试问题,有了新工具,现在结果显而易见。

另一个问题是某些数据库集群的巨大读取流量。

添加一个查询缓存层,用于在 Memcached(一个高性能的分布式内存对象缓存系统,用于动态 Web 应用以减轻数据库负载)中缓存查询结果。

在查询数据库之前,特定高读取流量的数据库集群对任何单个文档的查询操作都会先在查询缓存层中进行,对数据库的任何写入操作也会同时更新缓存。

永利皇宫登录网址 16

这样就能够同时在多个数据库集群中推出此更新。 查询缓存是在 ORM(Object Relational Mapping,对象关系映射)和驱动程序级别编写的,这使我们可以同时更新多个有问题的数据库集群。

永利皇宫登录网址 17事实证明,去年5月和6月经历的交易量井喷与去年12月和今年1月经历的交易量井喷根本不是一个数量级的。

借助这些修复和其他方法,Coinbase 平台就能够承受更大的交易量激增。

永利皇宫登录网址 182017年上半年的交易量井喷(红圈处)较后期而言不足为奇

为未来做准备

今天,Coinbase 团队正积极努力为下一次加密货币市场的井喷做准备。

虽然在井喷期间做这些改进工作很容易,即使未来将处于交易量非常低的周期,但仍然需要找到一种方法来改善系统在未来的表现。

比较有效的方案就是通过模拟几倍于过去经历的交易量峰值来测试平台环境,来发现下一个问题点可能来自哪里。

解决方案就是执行交易流量的捕获和回放,明确地说就是在数据库上按需生成人为的“加密狂热(crypto mania)”。

这种方案比生成合成流量的方案更好,因为它去除了合成脚本需要保持最新的要求。每次运行套件时,都要确保查询操作根据捕获的数据准确映射到应用程序生成的流量类型。

为此,我们创建了一个名为“Capture”的工具,其内部封装了现有工具“mongoreplay”。

在环境中选择一个特定数据库集群后,Capture 会同时启动数据库集群快照并开始捕获定向到该数据库集群的应用程序服务器上的原始流量。然后,它会在一段时间后将这些捕获的加密信息保存到S3回放。

当准备好执行回放时,另一个基于“mongoreplay”名为“Cannon”的工具将根据之前的数据库集群快照将记录的流量回放到新启动的数据库集群上。

永利皇宫登录网址 19

在这个过程中,面临的挑战就是如何同时横跨多个应用程序服务器来捕获单个数据库集群的所有 MongoDB 流量。

解决方法就是,Cannon 工具通过从每次捕获中打开一个10MB的缓冲区来同时进行合并和过滤捕获。

永利皇宫登录网址 20

最终得到一个合并的捕获文件,然后 Cannon 工具可以将其定向到一个新启用的 MongoDB 数据库集群中。

Cannon 工具允许精确选择回放捕获信息的速度,从而模拟数千倍于平台一天可能遇到的交易数据量的负载。

永利皇宫登录网址 21

虽然才刚刚开始使用 Capture 和 Cannon 工具,但在 MongoDB 数据库集群上执行这类的负载测试时,我们取得了一些新发现。

这个发现来自于 Cannon 工具的调试功能。 Cannon 工具能够检查特定的捕获文件并查看其中的前100条消息。 经过检查,确实发现了一些有趣的事:

永利皇宫登录网址 22有没有注意到 ping 命令(ping 命令用于检查网络是否连通,可以帮助分析和判定网络故障。)与 find 命令(查找)混合在一起?

事实证明,数据库 MongoDB 的 Ruby 语言驱动程序未完全遵循 MongoDB 驱动程序的设计规范,并且在每次查询数据库时通过执行 ping 命令以检查复制集状态。

虽然这种行为不太可能导致 Coinbase 平台故障停机,但几乎可以肯定,这是造成我们在监控中观察到的“幽灵”行为的原因。

永利皇宫登录网址 23在团队协作完成这次挑战后,我们为 Coinbase 目前的可靠性状态感到自豪。

2017年的事件再次证明,给客户提供访问和查看资金的可靠服务对于实现Coinbase 成为值得信赖的购买、销售和管理加密货币平台的目标至关重要。

虽然安全性始终是我们的首要任务,但我们也乐于将确保我们平台可靠性、可扩展性当作Coinbase的主要任务!

目前,我们已经组建了三个独立的专注维护平台高性能和可扩展性团队,为未来加密货币热情的暴涨做好准备。

版权声明:本文由永利皇宫登录网址发布于区块链,转载请注明出处:永利皇宫登录网址:MongoDB介绍及安装,作为PHP程