PHP操作MongoDB配置与学习笔记

PHP操作MongoDB配置与学习笔记
PHP操作MongoDB配置与学习笔记

PHP操作MongoDB配置与学习笔记

PHP操作MongoDB配置与学习笔记有需要的朋友可参考参考。Mongo主要解决的是海量

数据的访问效率问题,根据官方的文档,当数据量达到50GB以上的时候,Mongo的数据

库访问速度是MySQL的10倍以上

2,安装(windows only)

到官网下载对应的包

解压到d:mongodb

创建d:mongodbdata放置数据文件

3,运行mongodb

d:mongodbbin下有一些可执行文件,其中mongod.exe是服务器端,mongo.exe是客户端。

运行cmd,输入

d:mongodbbin>mongod.exe -dbpath d:mongodbdata

服务器成功启动

4,让php支持MongoDB

下载php_mongo.dll,注意版本,php5.3.x应该支持v9的(有些老资料让apache的下v6,

其实要看看phpinfo后下载对应的版本);

修改php.ini,增加extension = php_mongo.dll;

重启apache.

代码如下复制代码

/**

* PHP操作MongoDB学习笔记

* 2011年2月23日

* 原作者:xiaocai

*/

//*************************

//** 连接MongoDB数据库服务器

//*************************

//格式=>("mongodb://用户名:密码@地址:端口/默认指定数据库",参数)

$conn = new Mongo();

//可以简写为

//$conn=new Mongo(); #连接本地主机,默认端口.

//$conn=new Mongo("172.21.15.69"); #连接远程主机

//$conn=new Mongo("xiaocai.loc:10086"); #连接指定端口远程主机

//$conn=new Mongo("xiaocai.loc",array("replicaSet"=>true)); #负载均衡

//$conn=new Mongo("xiaocai.loc",array("persist"=>"t")); #持久连接

//$conn=new Mongo("mongodb://sa:123@localhost"); #带用户名密码

//$conn=new Mongo("mongodb://localhost:27017,localhost:27018"); #连接多个服务器

//$conn=new Mongo("mongodb:///tmp/mongo-27017.sock"); #域套接字

//$conn=new Mongo("mongodb://admin_miss:miss@localhost:27017/test",array('persist'=>'p',"replicaSet"=>true)); #完整

//*************************

//** 选择数据库与表

//*************************

$db=$conn->mydb; #选择mydb数据库

//$db=$conn->selectDB("mydb"); #第二种写法

$collection=$db->column; #选择集合(选择'表')

//$collection=$db->selectCollection('column'); #第二种写法

//$collection=$conn->mydb->column; #更简洁的写法

//注意:

// 1.数据库和集合不需要事先创建,若它们不存在则会自动创建它们.

// 2.注意错别字,你可能会无意间的创建一个新的数据库(与原先的数据库混乱).

//*************************

//** 插入文档

//*************************

//**向集合中插入数据,返回bool判断是否插入成功. **/

$array=array('column_name'=>'col'.rand(100,999),'column_exp'=>'xiaocai');

$result=$collection->insert($array); #简单插入

echo "新记录ID:".$array['_id']; #MongoDB会返回一个记录标识

var_dump($result); #返回:bool(true)

#插入结果:{ "_id" : ObjectId("4d63552ad549a02c01000009"), "column_name" : "col770", "column_exp" : "xiaocai" }

#'_id'为主键字段,在插入是MongoDB自动添加.

//**向集合中安全插入数据,返回插入状态(数组). **/

$array=array('column_name'=>'col'.rand(100,999),'column_exp'=>'xiaocai2');

$result=$collection->insert($array,true); #用于等待MongoDB完成操作,以便确定是否成功.(当有大量记录插入时使用该参数会比较有用)

echo "新记录ID:".$array['_id']; #MongoDB会返回一个记录标识

var_dump($result); #返回:array(3) { ["err"]=> NULL ["n"]=> int(0) ["ok"]=> float(1) }

//**插入的完整语法**/

# insert(array $data,array('safe'=>false,'fsync'=>false,'timeout'=>10000))

# 参数说明:safe:默认false,是否安全写入;fsync:默认false,是否强制插入到同步到磁盘;timeout:超时时间(毫秒) //**以下两次插入的为同一条记录(相同的_id),因为它们的值相同**/

$collection->insert(array('column_name'=>'xiaocai'));

$collection->insert(array('column_name'=>'xiaocai'));

#避免方法,安全插入

$collection->insert(array('column_name'=>'xiaocai'),true);

try {

$collection->insert(array('column_name'=>'xiaocai'),true);

}catch(MongoCursorException $e){

echo "Can't save the same person twice!n";

}

//详细资料:https://www.360docs.net/doc/0c4324861.html,/manual/zh/mongocollection.insert.php

//*************************

//** 更新文档

//*************************

//** 修改更新**/

$where=array('column_name'=>'col123');

$newdata=array('column_exp'=>'GGGGGGG','column_fid'=>444);

$result=$collection->update($where,array('$set'=>$newdata)); #$set:让某节点等于给定值

/*

* 原数据

* {"_id":ObjectId("4d635ba2d549a028********"),"column_name":"col123","column_exp":"xiaocai"}

* 被替换成了

*

{"_id":ObjectId("4d635ba2d549a028********"),"column_name":"col123","column_exp":"GGGGGGG","column_fid":444} */

//** 替换更新**/

$where=array('column_name'=>'col709');

$newdata=array('column_exp'=>'HHHHHHHHH','column_fid'=>123);

$result=$collection->update($where,$newdata);

/*

* 原数据

* {"_id":ObjectId("4d635ba2d549a028********"),"column_name":"col709","column_exp":"xiaocai"}

* 被替换成了

* {"_id":ObjectId("4d635ba2d549a028********"),"column_exp":"HHHHHHHHH","column_fid":123}

*/

//** 批量更新**/

$where=array('column_name'=>'col');

$newdata=array('column_exp'=>'multiple','91u'=>684435);

$result=$collection->update($where,array('$set'=>$newdata),array('multiple'=>true));

/**

* 所有'column_name'='col'都被修改

*/

//** 自动累加**/

$where=array('91u'=>684435);

$newdata=array('column_exp'=>'edit');

$result=$collection->update($where,array('$set'=>$newdata,'$inc'=>array('91u'=>-5)));

/**

* 更新91u=684435的数据,并且91u自减5

* 注意:91u存在时加上-5,不存在时就设置91u=-5

*/

//** 匹配到就更新,否则新增**/

$c->update(

array("name" => "joe"),

array("username" => "joe312", "createdAt" => new MongoDate()),

array("upsert" => true) #up(date)(in)sert

);

/** 删除节点**/

$where=array('column_name'=>'col685');

$result=$collection->update($where,array('$unset'=>'column_exp'));

/**

* 删除节点column_exp

*/

/** 附加新数据到节点**/

$coll->update(

array('b'=>1),

array('$push'=>array('a'=>'wow')) #附加新数据到节点a

);

# 如果对应节点是个数组,就附加一个新的值上去;不存在,就创建这个数组,并附加一个值在这个数组上;# 如果该节点不是数组,返回错误。

# 原纪录:array('a'=>array(0=>'haha'),'b'=>1)

# 新记录为:array('a'=>array(0=>'haha',1=>'wow'),'b'=>1)

# $pushAll与$push类似,只是会一次附加多个数值到某节点

/** 判断更新**/

$coll->update(

array('b'=>1),

array('$addToSet'=>array('a'=>'wow'))

);

# 如果该阶段的数组中没有某值,就添加之

# 设记录结构为array('a'=>array(0=>'haha'),'b'=>1)

# 如果在a节点中已经有了wow,那么就不会再添加新的,

# 如果没有,就会为该节点添加新的item——wow。

/** 删除某数组节点的最后一个元素**/

$coll->update(

array('b'=>1),

array('$pop'=>array('a'=>1)) #删除a数组节点的最后一个元素

);

/** 删除某数组节点的第一个元素**/

$coll->update(

array('b'=>1),

array('$pop'=>array('a'=>-1)) #删除a数组节点的第一个元素

);

/** 删除某数组节点的元素**/

$coll->update(

array('b'=>1),

array('$pull'=>array('a'=>'haha'))

)

# 如果该节点是个数组,那么删除其值为value的子项,如果不是数组,会返回一个错误。# 原记录为:array('a'=>array(0=>'haha',1=>'wow'),'b'=>1),

# 删除a中value为haha的子项

# 结果为:array('a'=>array(0=>'wow'),'b'=>1)

# $pullAll与$pull类似,只是可以删除一组符合条件的记录。

# 注意:

# 1.注意区分替换更新与修改更新

# 2.注意区分数据类型如array('91u'=>'684435')与array('91u'=>684435)

//*************************

//** 删除文档

//*************************

/** 删除**/

$collection->remove(array('column_name'=>'col399'));

//$collection->remove(); #清空集合

//$collection->drop(); #清空,效率高于remove()

/** 删除指定MongoId **/

$id = new MongoId("4d638ea1d549a028********");

$collection->remove(array('_id'=>(object)$id));

/*

* *

* 使用下面的方法来匹配{"_id":ObjectId("4d638ea1d549a028********")},查询、更新也一样 * $id = new MongoId("4d638ea1d549a028********");

* array('_id'=>(object)$id)

* *

*/

//*************************

//** 查询文档

//*************************

/** 查询文档中的记录数**/

echo 'count:'.$collection->count()."
"; #全部

echo 'count:'.$collection->count(array('type'=>'user'))."
"; #可以加上条件

echo 'count:'.$collection->count(array('age'=>array('$gt'=>50,'$lte'=>74)))."
"; #大于50小于等于74

echo 'count:'.$collection->find()->limit(5)->skip(0)->count(true)."
"; #获得实际返回的结果数

/**

* 注:$gt为大于、$gte为大于等于、$lt为小于、$lte为小于等于、$ne为不等于、$exists不存在

*/

/** 集合中所有文档**/

$cursor = $collection->find()->snapshot();

foreach ($cursor as $id => $value) {

echo "$id: "; var_dump($value); echo "
";

}

/**

* 注意:

* 在我们做了find()操作,获得$cursor游标之后,这个游标还是动态的.

* 换句话说,在我find()之后,到我的游标循环完成这段时间,如果再有符合条件的记录被插入到collection,那么这些记录也会被$cursor获得.

* 如果你想在获得$cursor之后的结果集不变化,需要这样做:

* $cursor = $collection->find();

* $cursor->snapshot();#获得快照!

* 详见https://www.360docs.net/doc/0c4324861.html,/index.php/2010/08/mongo_php_cursor.html

*/

/** 查询一条数据**/

$cursor = $collection->findOne();

/**

* 注意:findOne()获得结果集后不能使用snapshot(),fields()等函数;

*/

/** age,type 列不显示**/

$cursor = $collection->find()->fields(array("age"=>false,"type"=>false));

/** 只显示user 列**/

$cursor = $collection->find()->fields(array("user"=>true));

/**

* 我这样写会出错:$cursor->fields(array("age"=>true,"type"=>false));

*/

/** (存在type,age节点) and age!=0 and age<50 **/

$where=array('type'=>array('$exists'=>true),'age'=>array('$ne'=>0,'$lt'=>50,'$exists'=>true));

$cursor = $collection->https://www.360docs.net/doc/0c4324861.html,nd($where);

/** 分页获取结果集**/

$cursor = $collection->find()->limit(5)->skip(0);

/** 排序**/

$cursor = $collection->find()->sort(array('age'=>-1,'type'=>1)); #1表示降序-1表示升序,参数的先后影响排序顺序

/** 创建索引**/

$collection->ensureIndex(array('age' => 1,'type'=>-1)); #1表示降序-1表示升序

$collection->ensureIndex(array('age' => 1,'type'=>-1),array('background'=>true)); #索引的创建放在后台运行(默认是同

步运行)

$collection->ensureIndex(array('age' => 1,'type'=>-1),array('unique'=>true)); #该索引是唯一的/** 取得查询结果**/

$cursor = $collection->find();

$array=array();

foreach ($cursor as $id => $value) {

$array[]=$value;

}

php程序员简历模板

php程序员简历模板 php程序员简历模板一 年龄:21学历:大专 专业技能 核心语言: 熟练应用PHP+MySQL技术,能在WAMP环境下熟练编程。 理解对于Web网站开发的安全性要求,例如防SQL注射、令牌加密等技术。 理解Web开发流程,具有OO思想,能独立开发网站。 框架技术: 熟练使用smarty模板引擎技术,TP框架开发网站。 对三层结构、MVC的开发(设计模式)有较好的理解。 数据库: 熟练应用MySQL、SQLServer2005数据库,以及使用SQL语言。 前台展现: 熟识HTML、XHTML网页技术,能熟练应用DIV+CSS样式布局设计出符合Web2.0的页面,熟练应用JavaScript、Ajax技术实现对于客户端的脚本验证,能够熟练使用Jquery类库实现对页面即点即改等功能。 开发工具: 能够使用ZendStudio-5.5.0等PHP开发工具。 掌握PhotpShop、Dreamweaver网页开发工具的使用。

熟悉php168,Ecshop二次开发工具的使用。 项目经验 人事管理系统(应用程序) 软件环境:WAMP 编程工具:EditPlus 责任描述:组内讨论需求分析以及数据建模,功能独立开发完成 项目描述:无论对于大型公司,中小型公司,都避免不了对员工的管理,对于每个公司的管理者,在任何方面都需要一个既提供标 准有提供管理的系统;对于公司的员工也希望能够了解自己的表现及 在公司的职位、职责; 让公司对员工的管理更方便,通过本系统能有效地管理工资发放、员工的考勤动态 还可实现员工的自我查看和管理;以提高公司的执行效率和经济 效益。 项目感想:该项目主要应用了smarty+Ajax等技术由于php是一种弱的语言,并不能实现面向对象的多态(重载),所以只是用到了 面向对象的编程思想。在开发的过程中也使我更加熟悉基于 Smarty+CMS的开发模式。 天元茶叶网(168二次开发) 软件环境:WAMP 开发工具:ZendStudio-5.5.0 项目描述:本次开发运用的是php168v6版本的二次开发! 这个版本主要是标签的使用,它实现了内容与设计的结合!方便 快捷 本次开发的是茶叶网,实现了php168v6版本的功能

Composer 学习笔记

对于现代语言而言,包管理器基本上是标配。Java有Maven,Python有pip,Ruby有gem,Nodejs有npm。PHP的则是PEAR,不过PEAR坑不少: ?依赖处理容易出问题 ?配置非常复杂 ?难用的命令行接口 所以Composer出现了。 Composer 不是一个包管理器。是的,它涉及 "packages" 和 "libraries",但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它 不会在全局安装任何东西。因此,这仅仅是一个依赖管理。 这种想法并不新鲜,Composer 受到了 node's npm 和 ruby's bundler 的强烈启发。而当 时 PHP 下并没有类似的工具。 Composer 将这样为你解决问题: a) 你有一个项目依赖于若干个库。 b) 其中一些库依赖于其他库。 c) 你声明你所依赖的东西。 d) Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。声明依赖关系 比方说,你正在创建一个项目,你需要一个库来做日志记录。你决定使用 monolog。 为了将它添加到你的项目中,你所需要做的就是创建一个 composer.json 文件,其中描 述了项目的依赖关系。 { "require": { "monolog/monolog": "1.2.*" } } 我们只要指出我们的项目需要一些 monolog/monolog 的包,从 1.2 开始的任何版本。 系统要求 运行 Composer 需要 PHP 5.3.2+ 以上版本。一些敏感的 PHP 设置和编译标志也是必须的,但对于任何不兼容项安装程序都会抛出警告。 我们将从包的来源直接安装,而不是简单的下载 zip 文件,你需要 git 、 svn 或者 hg , 这取决于你载入的包所使用的版本管理系统。 安装 - *nix系统下 局部安装 要真正获取 Composer,我们需要做两件事。首先安装 Composer (同样的,这意味着 它将下载到你的项目中): curl -sS https://https://www.360docs.net/doc/0c4324861.html,/installer | php 注意:如果上述方法由于某些原因失败了,你还可以通过 php >下载安装器: php -r "readfile('https://https://www.360docs.net/doc/0c4324861.html,/installer');" | php

物联网岗位细分

物联网岗位细分 -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

物联网开发工程师职业方向细分 新基建背景下,物联网领域对于人才的需求越发强烈,为此,物联网培训品牌机构-----开物学院综合智联招聘、51job等招聘网站对于相关职位信息进行了汇总。由于物联网技术涉及面太广,我们对于“物联网开发工程师”的岗位技能进行分析,可以看出其方向细分、能力综合的根本特性。无论对于物联网专业的学习者还是跨行从业者,都需要在了解物联网系统架构的基础上,深入培养某个方向的技能,才能在物联网产业发展的过程中找到自己的职业定位。 一、数据架构方向(物联网大数据架构师) 岗位职责: o负责物联网大数据平台系统的设计与实现,包括实时流和离线数据等相关功能的开发与实现。 o根据开发规范与流程独立完成模块的设计、编码、测试以及相关文档。o负责物联网监测行业的算法工程化实现。 任职要求: o有相关的大数据系统架构经验,具有扎实的计算机科学功底,扎实的编程基础和数据结构算法基础,良好的工程素养,极强的问题解决能力 o熟练掌握Hadoop、Kafka、Spark、Storm等分布式框架原理,有相关的调优、运维、开发经验 o具有Postgresql、MySql、MongoDB,ClickHouse等其中一种数据库应用开发经验 o有物联网相关系统、可视化相关系统、微服务相关系统的设计和研发经验。 二、通信方向(物联网通信工程师) 岗位职责: 负责物联网终端、网关及相关通信技术开发。 任职要求:

精通无线通信相关协议及技术,如LoRaWAN、NB-IOT、Wi-Fi、BLE、LTE、Zigbee等 熟悉硬件开发流程,熟悉RF电路,对各种射频技术及参数有较好的理解 熟悉MQTT、CoAP、HTTP REST、WebSocket等相关物联网连接协议 三、软件开发方向(物联网平台软件开发工程师) 岗位职责: 按照软件工程相关工作模式保质保量完成软件产品功能设计和相关文档编写。 独立设计开发物联网应用平台功能模块,完成软件产品集成及测试。 协助支撑完成终端软硬件测试平台搭建和提供终端软件技术咨询服务。 任职要求: 熟悉Java,Python或C/C++等语言,熟悉高并发、高性能的分布式系统的设计优先。 精通物联网技术原理,熟悉物联网相关技术趋势, 熟悉物联网相关协议(MQTT、CoAP、LwIP、LwM2M)及相关开源项目优先。 熟悉Spring MVC、Hibernate、Mybatis开源开发框架。 熟练使用Redis、RabbitMQ、MongoDB等相关或类似技术。 熟练使用Linux(CentOS/Ubuntu)操作和管理。 四、嵌入式开发方向(物联网嵌入式高级开发工程师) 岗位职责: o负责与芯片/模组商/硬件厂商等合作伙伴共同实现IoT产品的开发。 o负责IoT协议制定和各个端包括Linux/Android/各类RTOS等的移植实现。 o负责IoT某些核心模块能力,如网络协议栈等实现。 o负责各类IoT应用场景下终端产品的选型和开发。 任职要求: o精通C/C++语言编程,熟悉嵌入式开发,具有良好的编程风格和文档编制习惯。 o精通嵌入式操作系统,熟练掌握任务调度/内存回收等实现原理,有freertos、UCOS、RT-Thread、linux等系统开发经验者优先。 o熟悉主流ARM处理器体系架构,有STM32、NXP等芯片开发经验优先。 o熟悉各类物联网通讯协议,如:LoRa、NB-IoT、eMTC、WiFi/BLE等,熟悉TCP/IP网络架构,有相关物联网开发经验优先。 o五、移动端开发方向(物联网移动端开发工程师)岗位职责: 负责iOS/Android下AIOT移动端APP SDK开发; 负责对接客户APP开发的接口需求。 任职要求: 熟悉常见数据结构、算法和设计模式,熟悉TCP/IP协议。

PHP程序设计习题答案

第1章PHP开篇 习题 一、填空题 1.Apache的httpd服务程序使用的是【80 】端口。 2.在进行软件开发时有两种基本架构,B/S架构和【C/S 】架构。 3.URL的英文全称是【Uniform Resource Locator】,中文名称为【统一资源定位符 】。 4.【HTTP 】协议是计算机硬件与软件之间数据交换的格式。 5.【HTTP】表示传输数据所使用的协议,【WWW】表示要请求的服务器主机名。 二、判断题 1.使用PHP写好的程序,在Linux和Windows平台上都可以运行。(√) 2.PHP可以支持MySQL数据库,但不支持其它的数据库。(×) 3.PHP有很多流行的MVC框架,这些框架可以使PHP的开发更加快捷。(√) 4.Zend Studio是PHP中常用的IDE(集成开发环境)。(√) 5.进行PHP程序开发时,可以借助软件和工具来提高效率。(√) 三、选择题 1.下列选项中,不是URL地址中所包含的信息是( D )。 A. 主机名 B. 端口号 C. 网络协议 D. 软件版本 2.PHP是一种( A)的编程语言。 A. 解释型 B. 编译型 C. 两者都是 D. 两者都不是 3.PHP是个网站开发中非常流行的脚本语言,其流行的原因不包含( C )。 A. 易学 B. 易用 C. 易调试 D. 易扩展 4.PHP与Linux、Apache和MySQL一起共同组成了一个强大的Web应用程序平台,下 列选项中为该平台简称的是(B )。 A. WAMP B. LAMP C. LNMP D. WNMP 5.在下列选项中,哪些不属于PHP的突出特点( B )。 A开源免费 B. 开发成本高 C. 跨平台性 D. 支持多种数据库 四、简答题 1.请简要说明PHP的突出特点是什么? 1.开源免费2跨平台性3.面向对象 4.支持多种数据库 5.快捷性.

php100视频教程学习笔记

php100视频教程学习笔记 第一讲:2011年1月10日22:02:50 PHP类似于C,Perl,移植性非常好,参考源码多。 lamp:linux wamp:windows WampServer 5:PHP5.2.5 MySQL5 Apache2 PHPMyAdmin2.11.1.1 SQLiteManager 1.2.0 WAMPS display errors, short open tag:短标签模式WampServer2 标签语言:<%..%> ;结束,否则会出现错误。 注释风格:/**/;//;# Unix风格单行注释 学会使用注释来屏蔽符号来调试 第二讲:2011年1月10日22:03:04 弱类型只是局部变量 _和字母开头 标量类型:Boolean integer float(double) string 复合类型:array object " "支持转译字符,''不支持转译字符。 $bo=array(1,2,3); $bo=arrary("A"=>1,"B"=>2); discuz linux 777:最高权限; 775 第三讲:2011年1月10日22:31:46

1、算术运算。 2、赋值运算。 3、比较运算。 4、逻辑运算。 5、递增递减运算。 【+= *= ==只判断值而不判断类型;===完全比较:数值类型和数值FALSE不输出。 &&逻辑与and; ||逻辑或or; xor逻辑异或;先将比较的两边转换成布尔类型的,在执行它们的关 系。得到值为布尔值。 递增递减只能操作变量。$a++ 相当于+1后输出;++$a 先运算后加$a;;$a--;--$a; 做运算赋值以后在输出:$a=6;echo $a++; //输出为6; 】 第四讲:条件语句2011年1月10日22:22:40 1、 if(expr) echo TRUE; else echo FALSE; 2、规范 if(expr){

mysql优化笔记

◆Mysql数据库的优化技术<大型网站优化技术> 对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引] c: 分表技术(水平分割、垂直分割) d: 读写[写: update/delete/add]分离 e: 存储过程[模块化编程,可以提高速度] 数据库的三层结构: f: 对mysql配置优化[配置最大并发数my.ini, 调整缓存大小] g: mysql服务器硬件升级 h: 定时的去清除不需要的数据,定时进行碎片整理(MyISAM) CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON tbl_name (index_col_name,...) ◆什么样的表才是符合3NF (范式) 表的范式,是首先符合1NF, 才能满足2NF , 进一步满足3NF 1NF: 即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只有数据库是关系型数据库(mysql/oracle/db2/informix/sysbase/sql server),就自动的满足1NF ?数据库的分类 关系型数据库: mysql/oracle/db2/informix/sysbase/sql server 非关系型数据库: (特点: 面向对象或者集合) NoSql数据库: MongoDB(特点是面向文档) 2NF: 表中的记录是唯一的, 就满足2NF, 通常我们设计一个主键来实现id primary key ; 3NF: 即表中不要有冗余数据, 就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放. 比如下面的设计就是不满足3NF:显示推导处理

Windows下安装MongoDB服务器-王昌军

Windows下安装MongoDB服务器 MongoDB的官方下载站是https://www.360docs.net/doc/0c4324861.html,/downloads,可以去上面下载最新的程序下来。在下载页面可以看到,对操作系统支持很全面,OS X、Linux、Windows、Solaris 都支持,而且都有各自的32位和64位版本。目前的稳定版本是2.0.2版本。 1.安装包及安装目录准备 (1). 下载MongoDB url地址: https://www.360docs.net/doc/0c4324861.html,/downloads (2). 设置MongoDB目录:在D盘建立D:\Software\MongoDB-2.0.2\bin目录。解压下载的MongoDB安装包,解压并将解压后的文件中的bin目录下的所有文件拷贝到刚才建立的目录下。 (3). 设置数据文件路径:在D:\Software\MongoDB-2.0.2目录下建立data文件夹,用以存放MongoDB数据文件。 (4). 设置日志文件:在D:\Software\MongoDB-2.0.2目录下建立logs文件夹,并在logs下面建立mongodb.log文件。 2.安装MongoDB服务器 打开cmd窗口(如果是win7的话。那启动cmd要用管理员身份来启动(右键以管理员运行)):输入下面命令: C:\Windows\system32>D: D:\>cd D:\Software\MongoDB-2.0.2\bin D:\Software\MongoDB-2.0.2\bin>mongod --dbpath D:\Software\MongoDB-2.0.2\data --logpath=D:\Software\MongoDB-2.0.2\logs\mongodb.log --install

第7讲:mysqli扩展库(面向对象、面向过程)

mysqli 1.mysqli (mysql improve) mysql扩展库的增强版 2.mysql 与mysqli 的比较 ①mysqli 的稳定性和安全性,效率有所提高 ②mysqli 支持面向对象编程,同时支持为了照应老程序员,也提供了面向过程的编程风格。 3.mysqli 类:代表php和mysql数据库之间的一个连接。 4.mysqli操作mysql数据库的步骤 ①创建mysqli 对象//验证 ②操作数据库(发送sql) ③处理结果 ④关闭资源 5.实例:mysqli扩展库面向对象的方式操作数据库 connect_error){ //1111验证 die("失败".$mysqli->connect_error); } $sql="select * from words"; //2222222 发送指令 $res=$mysqli->query($sql); //33333333接受=发送的指令的返回结果while($row=$res->fetch_row()){ //3333对结果进行处理foreach($row as $key=>$val){ echo "--$val"; } echo "
"; } $res->free(); //44444 关闭资源 $mysqli->close(); ?> 注: 1.面向对象中,程序中的$res用于代表sql语句的执行结果 ①如果执行的事dml语句,则返回bool; ②如果执行的事dql语句,则返回查询结果mysqli_result 结果集对象。

mongodb 对内存的严重占用以及解决方法

mongodb 对内存的严重占用以及解决方法 刚开始使用mongodb的时候,不太注意mongodb的内存使用,但通过查资料发现mongodb对内存的占用是巨大的,在本地测试服务器中,8G的内存居然被占用了45%。汗呀。 本文就来剖析一下mongodb对内存的具体使用方法,以及生产环境针对mongodb占大量内存的问题的解决。 先看一个MongoDB服务器的top命令结果 shell> top -p $(pidof mongod) Mem: 32872124k total, 30065320k used, 2806804k free, 245020k buffers Swap: 2097144k total, 100k used, 2097044k free, 26482048k cached VIRT RES SHR %MEM 1892g 21g 21g 69.6 或者先top后,然后shift+m 把当前进场按占用内存的多少排序。看看你的mongodb 能占用多少内存。 先了解一下linux对内存的管理方式: 在Linux里(别的系统也差不多),内存有物理内存和虚拟内存之说,物理内存是什么自然无需解释,虚拟内存实际是物理内存的抽象,多数情况下,出于方便性的考虑,程序访问的都是虚拟内存地址,然后操作系统会把它翻译成物理内存地址。 很多人会把虚拟内存和Swap混为一谈,实际上Swap只是虚拟内存引申出的一种技术而已:操作系统一旦物理内存不足,为了腾出内存空间存放新内容,就会把当前物理内存中的内容放到交换分区里,稍后用到的时候再取回来,需要注意的是,Swap的使用可能会带来性能问题,偶尔为之无需紧张,糟糕的是物理内存和交换分区频繁的发生数据交换,这被称之为Swap颠簸,一旦发生这种情况,先要明确是什么原因造成的,如果是内存不足就好办了,加内存就可以解决,不过有的时候即使内存充足也可能会出现这种问题,比如MySQL 就有可能出现这样的情况,解决方法是限制使用Swap: shell> sysctl -w vm.swappiness=0 查看内存情况最常用的是free命令: shell> free -m total used free shared buffers cached Mem: 32101 29377 2723 0 239 25880 -/+ buffers/cache: 3258 28842 Swap: 2047 0 2047

php学习笔记总结

php学习笔记总结 篇一:php学习 调试/*………*/ //…….#.......... 插入时考虑清楚字段类型避免插入后出现缺值,乱码 @ 屏蔽错误or die 条件显示 以前学习php类的总结: 1.php中不能重载,但是能用子类覆盖父类的方法名称来实现新的重载 1.1 在子类中调用父类的覆盖部分可以使用父类名称::方法名称(); 2.final 只能定义类和方法,不能使用final定义成员属性,因为final是常量的意思,在php里定义常量使用的是define函数 2.1 final关键字标记的类不能被继承 2.2 final关键字标记的方法不能被子类重写 3.const是一个定义常量的关键字,在php中定义常量使用的是define()函数,但是在类里定义常量使用的是“const”这个关键字 3.1在程序中不能修改它的值。

3.2 访问const 修饰的成员属性要使用类名,在本类的方法里使用“self”关键字,但不使用$ 符号,也不能使用对象来访问。 4.static关键字可以描述类中的成员属性和成员方法 4.1 static 的成员属于类,而不属于任何对象, 4.2 static的成员是在类第一次被加载的时候分配的空间,其他类无法访问的,只对类的实例共享,能一定程度对类该成员形成保护 4.3 静态成员放到了“初始化静态段”,在类第一次加载的时候放入的,可以让堆内存里的每个对象共享。所以在静态方法里,可以使用这个方法所在的类的“类名”,也可以使用“self”来访问其他静态成员。“self”代表这个静态方法所在的类。 4.3.1 在类里的静态方法是不能访问类的非静态成员的。 4.3.2 在类的非静态方法里可以访问静态成员:”self:成员属性“; 4.4类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样,类似于全局函数。 4.5 在类内函数访问静态变量时前面加self::静态函数 4.6 静态变量可以在类外直接访问,访问方法是类名::静态变量 4.7 静态函数可以在类外直接访问,访问方式是类名::静态函数 4.8 在类内静态函数访问另一个静态函数时使用类名::静态函数名

168 道2019年最新的Python面试题,让你最短时间内掌握核心点

1.列出5 个常用Python 标准库? 2.Python 内建数据类型有哪些? 3.简述with 方法打开处理文件帮我我们做了什么? 4.列出Python 中可变数据类型和不可变数据类型,为什么? 5.Python 获取当前日期? 6.统计字符串每个单词出现的次数 7.用python 删除文件和用linux 命令删除文件方法 8.写一段自定义异常代码 9.举例说明异常模块中try except else finally 的相关意义 10.遇到bug 如何处理 语言特性 1.谈谈对Python 和其他语言的区别 2.简述解释型和编译型编程语言 3.Python 的解释器种类以及相关特点? 4.说说你知道的Python3 和Python2 之间的区别? 5.Python3 和Python2 中int 和long 区别? 6.xrange 和range 的区别? 编码规范 7.什么是PEP8? 8.了解Python 之禅么?

9.了解docstring 么? 10.了解类型注解么? 11.例举你知道Python 对象的命名规范,例如方法或者类等 12.Python 中的注释有几种? 13.如何优雅的给一个函数加注释? 14.如何给变量加注释? 15.Python 代码缩进中是否支持Tab 键和空格混用。 16.是否可以在一句import 中导入多个库? 17.在给Py 文件命名的时候需要注意什么? 18.例举几个规范Python 代码风格的工具 数据类型 字符串 19.列举Python 中的基本数据类型? 20.如何区别可变数据类型和不可变数据类型 21.将"hello world"转换为首字母大写"Hello World" 22.如何检测字符串中只含有数字? 23.将字符串"ilovechina"进行反转 24.Python 中的字符串格式化方式你知道哪些? 25.有一个字符串开头和末尾都有空格,比如“adabdw ”,要求写一个函数把这个字符串的前后空格都去掉。

PHP面向对象和PHP面向过程的优缺点评比

P H P面向对象和P H P面 向过程的优缺点评比 Revised by Petrel at 2021

PHP面向对象和PHP面向过程的优缺点评比 面向对象与面向过程在许多编程语言中只能使用二者之一来进行编程,但是PHP语言与其他编程语言有不同之处,那就是我们可以自由的选择或者将PHP面向对象和PHP面向过程二者混用。目前绝大多数PHP程序员使用面向过程的方式,因为解析Web页面本身就非常“过程化”(从一个标签到另一个标签)。在HTML中嵌入过程处理代码是很直接自然的作法,所以PHP程序员通常使用这种方式。 如果你是刚接触PHP,用PHP面向过程的风格来书写代码很可能是你唯一的选择。但是如果你经常上PHP论坛和新闻组的话,你应该会看到有关“对象”的文章。你也可能看到过如何书写面向对象的PHP代码的教程。或者你也可能下载过一些现成的类库,并尝试着去实例化其中的对象和使用类方法--尽管你可能没有真正理解这些类为什么可以工作,或者为什么需要使用PHP面向对象的方法来实现功能。 应该使用“面向对象”的风格还是“面向过程”的风格?双方各有支持者。像“对象是低效的”或“对象非常棒”这样的议论也时有耳闻。本文不尝试轻易判定两种方法的哪种具有绝对的优势,而是要找出每种方法的优缺点。 以下是PHP面向过程风格的代码示例: 以下是PHP面向对象风格的代码示例: myPrint(); > 如果你想了解一些“面向对象”的基本知识,请使用Google搜索,网络上有非常多精彩的文章。 谁像这样写代码? 为了理解为什么这个论题成为论坛上口水战的导火线,我们看一些每个阵营的比较极端的例子。我们看看“过程狂热”和“对象狂热”。看看他们的观点听起来是不是有点熟悉。 过程狂热 过程狂热曾在上课时被计算机教师批评,因为这种方法没有使用更加抽象的实现方式。而支持PHP面向过程者的观点“它可以工作!”并不能提高其编程水平和

PHP正则表达式二徐枭雄课堂笔记

正则表达式 1.什么是正则表达式 a)例子:’//’;这就是正则表达 式 b)乱七八糟的一堆字符堆砌在一起,神秘的符号,有着 奇特的意义 2.和正则表达式相识的事物? a)乱/看不懂/神秘/意义 医生的字只有医院的人能看懂 道士的符只有道士明白 女人的心只有女人能懂 正则表达式只有程序员能看懂(所有的高级语言中都有正则表达式) 3.学习正则表达式可以做什么、 a)操作字符串时正则表达式的唯一作用 验证用户名长度是否合法 验证密码是否符合标准 验证手机号 验证URL地址 验证邮箱

BBS编辑器 Qq聊天表情 新闻采集器小偷程序 4.看看正则表达式的一些特点 a)1.正则表达式也是一个字符串 b)2.由特殊意义的字符组成的字符串 c) 3.具有一定的编写规则,也是一种模式 d)4.看做是一种编程语言 因为是用一些特殊字,按照规则编写出来的字符串,形成一种模式-正则表达式。 注意:如果正则表达式,不和函数一起使用,则他就是一个普通的字符串而已。如果把正则表达式放入到函数中一起使用,才能发挥出正则表达式的作用。 比如:将正则表达式放入到分分隔函数,哪可以用这个正则表达式去分隔字符串。 总结:正则弊端是就是通过构建具有特定规则的模式了,在于输入的字符串信息进行比较,分隔,查找,替换等工作。 在实际应用中记住一点:能使用字符串处理函数来完成的就不要使用正则表达式来完成。愿意:效率低。

5.PHP中提供了两套正则表达式函数库 a)Posix 扩展正则表达式函数-》ereg b)Perl 兼容正则表达式函数->preg (两套函数库功能一样,但是perl效率高,所以官方推荐使用perl) 6.学习正则表达式时,有两方面学习 a)1.正则表达式的模式如何编写 b)2.学习正则表达式的强大处理函数 7.正则表达式的语法(分4部) a)1.正则定界符 b)2.正则表达式中的原子 c) 3.正则表达式中的元字符(原子修正符) d)4.正则表达式的模式修正符 8.正则表达式的定界符 a)正则表达式的定界符是用来声明正则表达式的边界符 号。 正则表达式常用个的边界符是’/‘实际上任何非数字字

MongoVUE简单操作手册

MongoVUE 是个比较好用的MongoDB客户端,需要注册,但是可以变成永久使用,一、基础操作 新增一个连接 进入的界面形如

二、进阶操作 1、查看所有数据,会有三种格式的观看方式,分别为树形,表格,bjosn,详情见1.1 2、查看特定的数据,使用的时候shell命令,需要一些基础的语法知识,详情见2.1 3、更新数据,详情见3.1 4、删除数据,慎用,如果没有备份,删除之后无法恢复

5、插入数据,详情见5.1 6、复制文档到统一集合,详情见6.1 7、复制集合到不同的数据库,详情见7.1 8、删除文档内所有数据、慎用,如果没有备份,删除之后无法恢复 9、删除数据库慎用,如果没有备份,删除之后无法恢复 1.1 查看所有数据 点击”view之后”,会出现文档内的数据 树形: 表格: 需要修改什么值的时候,可以直接点击要修改的字段进行修改,修改完成之后按回车

Txt形,Bjson格式的 2.1查看特定的数据 1.点击”find”,输入条件之后点击find便可以进行查询,这里简单的讲一下基本的 查询语句 有点模糊,可以放大点 1、区域为基本查询 一组键值,key为要查询的字段,value为要查询字段的值,如有多个用逗号隔 开 语法{“要查询的字段”:“要查询字段的值”,“第二个”…..} 比如,我们想查一个名为huihh的人信息,并且年龄为30,那么写成

{“name”:”huihh”,”age”:30} 2、字段查询 和1有点不同,这么如果写查询语句 {"name":"huihh"}那么查询出来的数据,出了id,是一整列的name,并不会进行 筛选,所以,这里我们可以写成{“name”,“”},查询之后只显示name这一列, 如果需要其他的特别查询条件,与1合用 3、排序 方法使用一组键值对做参数,key是document里的key的名字,value是1升序或者-1降序。 比如,查询huihh会有3个人呢,那么就使用age进行排序, {“age”:-1} 4、结果集的筛选

PHP面向对象知识总结

面向对象知识: 1 你对面向对象的认识 2 什么是类?什么是对象?类和对象之间的关系? 类:类是具有相同属性和行为的一组对象的集合 对象:对象是实际存在的该类事物的每个个体,因而也称实例 类和对象的关系:类是对象的抽象,对象是类的实例 3 面向对象的3大特征 继承,封装,多态 4 怎么创建一个类的对象? 使用new 这个关键字创建对象 5 什么是构造方法(函数)?怎么定义?有什么样的特点? 构造方法(在OO中,函数被称为方法) 1 特殊的名称:__construct 2 在实例化对象时,自动被调用 3 在内存中划分了对应的内存空间区域 4 构造方法可以像普通方法一样,接收参数;这里的参数通常是用来初始化类中的属性的 5 构造方法不能重复定义,每个类当中有且只能有一个;如果不写相当于有一个默认的不带参数且没有任何执行语句的空函数 6 什么是析构方法(函数)?怎么定义?有什么特点? 析构函数:当某个对象成为垃圾或者当对象被显式销毁时执行。 __destruct() 析构函数,是在垃圾对象被回收时执行。 析构函数也可以被显式调用,但不要这样去做。 析构函数是由系统自动调用的,不要在程序中调用一个对象的虚构函数。 析构函数不能带有参数。 7 什么是封装?有什么作用?列举一些封装的实例 封装就是把对象的属性和行为结合成一个独立的相同单位,并尽可能隐藏对象的内部细节。 优点:信息隐蔽,封装即隐藏(目的:不能让别人随意修改信息)。 怎么实现封装? (1.访问修饰符(public、protected、private) (2.类 (3.函数方法 (4.文件 (5.文件夹 8 访问修饰符有哪3个?分别有什么作用、特点 public 公共的谁都可以用,也可以修改 protected 受保护的只有自己和后代可以使用和修改 private 私有的只有自己可以使用和修改 9 什么是继承?关键字是什么?有什么作用? 继承:扩展父类的内容,注意只能继承public和protected修饰的内容,而private 修饰的则不能继承 关键字:extends

phpcms学习笔记

1.推荐位(网站顶部推荐) {pc:content action="position" posid="9" order="id" num="10" cache="3600"}

{/pc} 2.Rss rss 3.注册、登录 4.搜索
5.目录 {pc:content action="category" catid="0" num="25" siteid="$siteid" order="listorder ASC"} {/pc} 6.输出二级菜单 {if $top_parentid}