MongoDB的PHP驱动方法与技巧

创建索引有时会阻塞新的连接

当与mongodb复制集建立连接时,驱动程序首先尝试连接并验证集群中每个非 隐藏的节点。如果一个节点是“down”状态,将跳过。然而,如果一个节点是“UP”状态,但是持有写锁,那么验证将没法执行下去,因此该驱动程序将被挂起了。

在mongodb 2.6版本前,在建立索引时的通病。所有的在前台或后台创建索引,在secondary端将在前台创建。

在PHP驱动程序的1.5.3版本会有所改进,在创建索引时,允许验证到second节点验证。

减少is_master_interval值

对于对可用性要求高的应用程序来说,建议检查默认的驱动程序运行时的配置设置。

mongo.is_master_interval选项控制着在复制集重新选举时驱动如何快速恢复。

is_master_interval选项默认值为15s,设置驱动发送“isMaster”请求每个mongod实例的时间间隔。这些请求帮助驱动程序判断复制集的拓扑结构,具体的来说,就是请求检测哪个节点是primary并可以接收写操作。

建议将该值设置为1或2秒,以让驱动程序在集群选举或故障转移时,能够迅速的定位到primary节点。当然啦,这也取决于有多少客户端以及ping的频率。

注意,当primary节点发生变化时,如选举或故障转移,总是会有几秒钟驱动程序会收到一个“MongoConnectionException” 信息 “No candidate servers found”。这些异常需要在你的代码中进行处理,否则会终止应用程序。

理解连接处理方式并配置连接TimeoutMS

PHP驱动程序不使用连接池。因此,建议你每个PHP进程创建一个连接。但是,如果web应用程序有许多PHP工作进程,将会创建很多新的数据库连接,PHP驱动程序不能共享进程之间的连接。因此,当网络节点慢,服务器繁忙时,PHP应用程序创建初始数据库连接时特别容易受到阻碍。

在这种情况下,建议你自定义 connectionTimeoutMS 选项和注意php.ini中的mongo.ping_interval选项。

connectionTimeoutMS

PHP驱动程序不显示的定义一个默认的连接超时。相反,默认值由php.ini文件中的default_socket_timeout选项决定,默认是60秒。连接将等待60秒断开,时间有些长,需要降低些。

强烈建议通过连接字符串的URI选项中显示设置connectionTimeoutMS选项。将其设置为5到30秒之间的值。

mongo.ping_interval

mongo.ping_interval默认值为5秒。该选项设置驱动程序发送ping请求到每个mongod实例发现“down”节点的时间间隔,用于跟踪驱动程序的服务器黑名单。告诉驱动程序哪些节点忽略。

(0)

相关推荐

  • PHP7之Mongodb API使用详解

    编译安装PHP7 编译安装PHP7 Mongdb扩展 #先安装一个依赖库yum -y install openldap-develwget https://pecl.php.net/get/mongodb-1.1.1.tgz /home/server/php7/bin/phpize   #根据自己编译的PHP环境而定./configure --with-php-config=/home/server/php7/bin/php-config make && make install#如果成功

  • php操作MongoDB类实例

    本文实例讲述了php操作MongoDB类的方法.分享给大家供大家参考.具体如下: 1. MyMongo.php文件: <?php /** * 仿写CI的MongoDB * @author sparkHuang 2011-11-03 * */ class MyMongo { private $mongo_config = "mongo_config.php"; private $connection; private $db; private $mongo_connect_stri

  • Linux安装PHP MongoDB驱动

    PHP利于学习,使用广泛,主要适用于Web开发领域. MongoDB的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身. 在php中使用mongodb你必须使用 mongodb 的 php驱动. 本文是小编在部署生产环境的时候简单记录. 1. 下载PHP的mongodb驱动安装包mongodb-1.1.9.tgz wget https://pecl.php.net/get/mongodb-1.1.9.tgz 2. 解压驱

  • PHP中的mongodb group操作实例

    紧接着上篇来,这篇主要讲,mongodb的group功能,做的还是挺强大的,相当对于find(),skip(),distinct()等,用法比较复杂. 测试数据: 复制代码 代码如下: > db.fruit.find();  { "_id" : 1, "category" : "fruit", "name" : "apple" }  { "_id" : 2, "categ

  • php实现Mongodb自定义方式生成自增ID的方法

    本文实例讲述了php实现Mongodb自定义方式生成自增ID的方法.分享给大家供大家参考.具体分析如下: 复制代码 代码如下: //首先创建一个自动增长id集合 ids >db.ids.save({name:"user", id:0}); //可以查看一下是否成功 > db.ids.find(); { "_id" : ObjectId("4c637dbd900f00000000686c"), "name" : &q

  • php操作mongoDB实例分析

    本文实例讲述了php操作mongoDB的方法.分享给大家供大家参考.具体分析如下: mongoDB数据库是一种以json格式存储的数据库,非常适用于各种应用开发,这里就来给各位朋友介绍一些mongoDB学习实例. mongodb想要整合PHP,需要安装Mongo扩展,这个比较简单,现在说一下MongoDB PHPAPI  及用法. 先看一个简单的例子,实例代码如下: 复制代码 代码如下: <?php  $m = new Mongo();  //这里采用默认连接本机的27017端口,当然你也可以连

  • Ubuntu下安装PHP的mongodb扩展操作命令

    在 https://pecl.php.net/package/mongo 下载 PHP的mongodb扩展的源码 复制代码 代码如下: $ wget -c https://pecl.php.net/get/mongo-1.6.9.tgz $ tar zxvf mongo-1.6.9.tgz $ cd mongo-1.6.9 $ phpize $ ./configure $ make all $ make test $ sudo make install

  • MongoDB的PHP驱动方法与技巧

    创建索引有时会阻塞新的连接 当与mongodb复制集建立连接时,驱动程序首先尝试连接并验证集群中每个非 隐藏的节点.如果一个节点是"down"状态,将跳过.然而,如果一个节点是"UP"状态,但是持有写锁,那么验证将没法执行下去,因此该驱动程序将被挂起了. 在mongodb 2.6版本前,在建立索引时的通病.所有的在前台或后台创建索引,在secondary端将在前台创建. 在PHP驱动程序的1.5.3版本会有所改进,在创建索引时,允许验证到second节点验证. 减少

  • MongoDB设计方法以及技巧示例详解

    前言 MongoDB是一种流行的数据库,可以在不受任何表格schema模式的约束下工作.数据以类似JSON的格式存储,并且可以包含不同类型的数据结构.例如,在同一集合collection 中,我们可以拥有以下两个文档document: { id: '4', name: 'Mark', age: '21', addresses : [ { street: '123 Church St', city: 'Miami', cc: 'USA' }, { street: '123 Mary Av', ci

  • MongoDB快速入门笔记(八)之MongoDB的java驱动操作代码讲解

    MongoDB的Java驱动是线程安全的,对于一般的应用,只要一个Mongo实例即可,Mongo有个内置的连接池(池大小默认为10个). 下面代码给大家介绍MongoDB的java驱动操作,具体代码如下所示: import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import org.bson.Document; import com.mongodb.MongoClient; impo

  • python根据时间生成mongodb的ObjectId的方法

    本文实例讲述了python根据时间生成mongodb的ObjectId的方法.分享给大家供大家参考.具体分析如下: mongodb的_id为ObjectId类型,ObjectId内是包含时间戳信息的,这样我们在保存数据的时候就不需要再单独记录一个添加时间了,如果需要按照时间查询,我们可以先把时间变化成可查询的ObjectId,再通过_id字段查询,由于mongodb的_id是主键,查询效率非常高.下面的函数给出了如何把时间换算成ObjectId,同时该函数还可以指定时间的偏移量,比如多少天前的时

  • 使用java web 在jsp文件及Class中连接MySQL和SQLsever 的驱动方法

    --方法一 使用java web 在jsp文件中连接 连接MySQL的驱动 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@page import="java.sql.Connection"%> <%@page import="java.sql.DriverManager"%>

  • Java中线程的基本方法使用技巧

    java中线程的基本方法的熟练使用是精通多线程编程的必经之路,线程相关的基本方法有wait,notify,notifyAll,sleep,join,yield等,本文浅要的介绍一下它们的使用方式. 线程的状态图 java将操作系统中的就绪和运行两种状态统称为可运行状态,java中线程的状态可以认为有以上六种. wait 调用该方法的线程进入WAITING状态,只有等待另外线程的通知或被中断才会返回,需要注意的是调用wait()方法后,会释放对象的锁. 因此,wait方法一般用在同步方法或同步代码

  • JavaScript方法和技巧大全

    这篇介绍JavaScript方面的日志,我在是Clang上看到的.作者介绍挺全面的,所以转载过来让感兴趣的朋友看一下.呵呵--- 有些时候你精通一门语言,但是会发现你其实整天在和其它语言打交道,也许你以为这些微不足道,不至于影响你的开发进度,但恰恰是这些你不重视的东西会浪费你很多时间,我一直以为我早在几年前就已经精通JavaScript了,直到目前,我才越来越觉得JavaScript远比我想象的复杂和强大,我开始崇拜它,就像崇拜所有OOP语言一样- 趁着节日的空隙,把有关JavaScript的方

  • Android strings.xml使用方法及技巧

    相信 strings.xml 已经是大家在 Android 开发中最熟悉的文件之一了,但其实它也有很多需要注意的地方和一些小技巧,知道了这些可以让你的 Android 应用更加规范易用,大家来看看吧.:   ) 不要复用 这一条可能很多人会有不同的意见,因为广为流行的编程理念就在教导我们要复用代码,当然代码复用是很好的理念,可以让程序更加简洁.但也容易形成什么都想复用的思维惯性,而这在某些场景下就可能会造成麻烦. 比如,想象下你在应用中的登录和注册界面中都是用了相同的字符串 – R.string

  • Python爬虫设置代理IP的方法(爬虫技巧)

    在学习Python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术,高强度.高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,这里讲述一个爬虫技巧,设置代理IP. (一)配置环境 安装requests库 安装bs4库 安装lxml库 (二)代码展示 # IP地址取自国内髙匿代理IP网站:http://www.xicidaili.com/nn/ # 仅仅爬取首页IP地址就足够一般使用 from bs4 import BeautifulSoup

  • centos8 使用yum 安装 mongodb 4.2的方法

    1.制作 repo 文件 参考 mongodb 官方的安装文档,使用下面的脚本制作Yum库安装mongodb4.2,但安装过程提示 "Failed to synchronize cache for repo 'mongodb-org-4.2'" [mongodb-org-4.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/

随机推荐