原创

php开发基于mongodb数据库的字段类型问题

比如下面的数据结构

{
    'field_1': 1,
    'field_2': '1',
    'field_3': true
}

在脚本语言里,这三个值是相等的,但mongodb可不这样认为,如果你用string类型去寻找field_1的值,那么永远找不到。

可是像在php这种弱类型语言里,本来就是string,int傻傻分不清楚,所以使用mongodb的php程序员经常会出现以下杯具场景,你存储的时候主键是一个用函数生成的int型数字,但取出记录的时候可能直接使用前端传递过来的GET参数,很不巧它只能是一个string类型,这样你就永远找不到这条记录了。

解决以上问题,我觉得一开始就用php7的标量类型约束,最好启用严格模式是个好习惯,这样类型不对了,能有个提示,你就可以进行类型转换了。

 

转载请注明:http://blog.p2hp.com/archives/4708…

        

推荐系统要解决的问题

用基于物品的协同过滤算法

 

1 topN推荐
2覆盖率   多样性 新颖性  惊喜度  信任度 实时性

对于 UserCF ,首先需要找到和他们看了同样书的其他用户(兴趣相似的用户),然后给他们推荐那些用户喜欢的其他书

 

对于 ItemCF ,需要给他们推荐和他们已经看的书相似的书,比如作者 B 看了很多关于数据挖掘的书,可以给他推荐机器学习或者模式识别方面的书。

冷启动问题?提供非个性化推荐:如热门排行榜,利用用户注册信息

利用用户标签数据   用户打标签 --专家打标签

 

利用社交网络数据

一定要有日志系统

要不要推荐理由

 

用户反馈模块——包括Play(播放)、评分和Not Interested(不感兴趣)3种。

上下文信息(时间上下文:时间效应,地点上下文)

利用社交网络数据(电子邮件,用户注册信息,位置数据,)

参考:

https://cloud.baidu.com/product/bdl.html?track=cp:nsem|pf:pc|pp:bdl|pu:paddle|ci:|kw:61645
http://www.paddlepaddle.org/index.cn.html
https://www.librec.net/
https://www.librec.net/dokuwiki/doku.php?id=blogs#%E6%8E%A8%E8%8D%90%E7%AE%97%E6%B3%95

 

 

php 连接mongodb方法

$manager = new MongoDB\Driver\Manager('mongodb://test1:test1@192.168.1.188:27017,192.168.1.187:27017/AppStore?replicaSet=test&safe=true&w=1&wtimeoutMS=300000&authSource=AppStore&ssl=false;');
或者

$options => array("replicaSet" => "test","safe"=>true,"w"=>1,"wtimeoutMS"=>2000,"authSource"=>"AppStore");
$dsn = 'mongodb://test1:test1@192.168.1.188:27017,192.168.1.187:27017';
$mongo =new MongoDB\Driver\Manager($dsn,  $options);

linux 命令连接
./mongo -host 192.168.1.188 -u test1 -ptest --authenticationDatabase Test

参考
http://cn2.php.net/manual/en/mongodb-driver-manager.construct.php

https://docs.mongodb.com/manual/reference/connection-string/#connections-connection-options

        

Nginx开启网站HTTPS 访问 –申请Let’s Encrypt免费SSL证书过程及常见问题

Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起,主要的目的也是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持。

Let's Encrypt免费SSL证书的出现,也会对传统提供付费SSL证书服务的商家有不小的打击。到目前为止,Let's Encrypt获得IdenTrust交叉签名,这就是说可以应用且支持包括FireFox、Chrome在内的主流浏览器的兼容和支持,虽然目前是公测阶段,但是也有不少的用户在自有网站项目中正式使用起来。…

            

php 插入mongodb uuid类型

$luuid ='e4eaaaf2-d142-11e1-b3e4-080027620cdd'; //格式一定要正确 » RFC 4122.

$uuid='0123456789abcdef';
$id = new \MongoDB\BSON\Binary($uuid,\MongoDB\BSON\Binary::TYPE_UUID);

查mongodb的LUUID类型为以下代码

$luuid= str_replace("-","",$luuid);
$id= new \MongoDB\BSON\Binary(hex2bin($luuid),\MongoDB\BSON\Binary::TYPE_OLD_UUID);
$id=bin2hex($id);
var_dump($id);
luuid 转为uuid:
$luuid=二进制字符
$id=bin2hex($luuid);
$a = substr($id,6, 2).substr($id,4, 2).substr($id,2, 2).substr($id,0, 2);
$b = substr($id,10, 2).substr($id,8, 2);
$c
        

EMQTT启用密码认证或mysql认证

EMQTT启用密码认证

权限认证

修改etc/emq.conf中:

mqtt.allow_anonymous = true 改为 false

mqtt.acl_nomatch = deny

把这条##mqtt.acl_file = etc/acl.conf注释掉(针对启用mysql认证)。

启用 用户名密码认证

基于MQTT登录用户名(username)、密码(password)认证。

etc/plugins/emq_auth_username.conf中配置默认用户: