• 关于

    查询修改干什么用的

    的搜索结果

回答

Re:你们备案客服干嘛用的。叫你们帮我查询一下备案被退回来是什么原因 .. 楼主,短信是实时的,数据下发有延时的,退回原因所以才会出现系统无显示的问题 ------------------------- Re:你们备案客服干嘛用的。叫你们帮我查询一下备案被退回来是什么原因 .. 不需要快递材料了,但是网站页面需要修改,不然还是通不过的

aliyunwangdan 2019-12-01 23:49:40 0 浏览量 回答数 0

回答

你缓存的目的是干什么?我感觉你是好几个场景。######回复 @foodon : 上面那只是一个简单的举例而已 主要问题就是在查询列表!######回复 @SandKing : 缓存是为了加快常用功能的速度,但你这几个加到缓存的内容我没弄清作用。我猜想:1、以uid为key缓存用户是为了经需要用户的信息;2、以username为key缓存password是为了登陆;3、这就弄不懂是什么场景了。######缓存的目的 但然是让查询更快啊######没有人么  这么快 就要沉了。。。###### 是这个样子的 缓存的确是要让查询更快,但是缓存主要是为了多次查询的某一条记录做的 比如说99%的用户需要查询第99条记录,那么把这条记录写入缓存是比较好的方案 但是缓存是有局限性的,像你要统计全表有多少的2类用户,这不可以用缓存来做的,因为这里涉及到的记录是全表中的记录,所以你的问题2是不合适的,因为如果要实现这个功能就不要用缓存做 再一个一般缓存应该不是用时间触发超时的,一般是在每次你向缓存中插入一条记录的时候统计当前缓存中的记录条数,如果达到了缓存大小的极限,那么会用一种选择算法把其中的一条记录去掉。记住这里是向缓存中插入记录,不是所有插入记录的情况。对数据库写操作的时候要直接操作数据库的,只有读操作才经过缓存,而且如果是update的话要判断是不是某条记录与缓存中记录不一样了,那样要修改缓存中的记录。其实对于哪些记录要进缓存也是要用算法判断的,选择大多数用户会查询而且一般不修改的是比较好的可以进缓存的记录。 加缓存的问题很多的,建议查oracle数据库缓存的原理。数据库也是有缓存的,一般不用我们来在程序内设置缓存,如果你想要这方面的知识那么看看oracle缓存一些基本的原理吧。 ######如果一个玩家上线 要保证他的所有请求都比较快,所有的请求都不能超过20毫秒 20毫秒中要包括你的业务逻辑+数据查询等等######你说的这种是对要求不是特别高的情况,我们在做游戏的时候你更具用户要查询一个用户的列表什么的。对查询速度要求比较高! 我要做的是查询 全查询缓存 ,插入 更新 同时修改缓存和数据库###### 不建议用缓存,根本就是根据索引查对象。。 没有达到缓存的基本要求。。 ######这样做 比你查询库 快太多太多了######你是做的缓存吗?怎么这么复杂?缓存一个对象不可以吗?不太理解你的需求。###### 你这等于就是把缓存做数据库来用,所以那个超时移除可以去掉了. 至于那些不常用的数据,可以想办法做到要用到时加载,不用时剔除,这块才是你需要设计的地方,比如说针对这种数据启用超时. ######基本上就是这个意思! 用的时候加载OK没问题,不用时剔除这个就会出现我上面说的这个情况了!###### 引用来自“李三乎”的答案 是这个样子的 缓存的确是要让查询更快,但是缓存主要是为了多次查询的某一条记录做的 比如说99%的用户需要查询第99条记录,那么把这条记录写入缓存是比较好的方案 但是缓存是有局限性的,像你要统计全表有多少的2类用户,这不可以用缓存来做的,因为这里涉及到的记录是全表中的记录,所以你的问题2是不合适的,因为如果要实现这个功能就不要用缓存做 再一个一般缓存应该不是用时间触发超时的,一般是在每次你向缓存中插入一条记录的时候统计当前缓存中的记录条数,如果达到了缓存大小的极限,那么会用一种选择算法把其中的一条记录去掉。记住这里是向缓存中插入记录,不是所有插入记录的情况。对数据库写操作的时候要直接操作数据库的,只有读操作才经过缓存,而且如果是update的话要判断是不是某条记录与缓存中记录不一样了,那样要修改缓存中的记录。其实对于哪些记录要进缓存也是要用算法判断的,选择大多数用户会查询而且一般不修改的是比较好的可以进缓存的记录。 加缓存的问题很多的,建议查oracle数据库缓存的原理。数据库也是有缓存的,一般不用我们来在程序内设置缓存,如果你想要这方面的知识那么看看oracle缓存一些基本的原理吧。 呃,你现在做的都是数据库要做的功能啊。数据库本身是有缓存功能的。你们没有数据库工程师么,这些不应该是代码里要考虑的内容啊。你的总的要求就是要快速的进行数据查询,这应该是数据库里存储过程的功能啊。 平时用代码写的话做个小的缓存自己用还可以,要这样大型的用数据库自己来处理是最好的。 如果非要自己做的话,可以借鉴memDB的思路,我们可以在内存中虚拟一个数据库,按照jdbc driver的接口实现存储在内存中的数据库,你可以让一个专门的服务器用来定期把修改写入本地数据库。 这种情况真心不建议自己做缓存

kun坤 2020-06-11 14:01:26 0 浏览量 回答数 0

回答

你这个没看懂要干什么不好意思,偷了个懒,刚修改了下代码,现在能看清了吧sql有错误,例如这样的都有错误:"WHEREt.id=m.teacherANDm.student=s.id",用引号将s.id这样的值引起来了,那么这就是常量,而应该这样:"WHEREt.id=?ANDm.student=?" 用and写关联查询。。

爱吃鱼的程序员 2020-06-22 14:34:30 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

回答

详细解答可以参考官方帮助文档产品详情从哪里能查到我购买的云解析产品详情? 登陆阿里云账号,进入阿里云控制台,选择云解析DNS产品进入VIP产品,点击“更多”,选择产品详情,即可查询到您购买的云解析产品的功能配置目前只提供付费版云解析的产品详情查看,免费版云解析不支持该功能 DNS修改如何将自己的DNS修改成VIPDNS?答: VIPDNS是独立部署的DNS服务集群,目前只针对云解析企业版用户使用。以下场景1,2,3都需要您手动修改DNS;第4种场景,系统会自动完成免费DNS与VIPDNS之前的切换,切换过程是平滑切换,解析可继续维持生效状态。 序号 场景 DNS修改 1 非万网域名万网免费DNS 需要您到原注册商处手动修改DNS为vip1.alidns.com/vip2.alidns.com 2 非万网域名非万网DNS 需要您到原注册商处手动修改DNS为vip1.alidns.com/vip2.alidns.com 3 万网域名非万网DNS 需要您手动在【我的云解析】-【基本管理】-【DNS创建/修改】-选择【一键修改万网DNS】,完成后会自动为您切换为VIPDNS 4 万网域名万网免费DNS 不需要做任何操作,在您完成绑定域名后,系统如检测到您未万网域名万网免费DNS,会自动为您将DNS切换成VIPDNS 我是免费版,是否也可以修改成VIPDNS?答:1) 免费版用户不支持将DNS修改为VIPDNS2) 如非万网域名,非阿里云企业版用户,在第三方注册商处修改成alidns的VIPDNS,该VIPDNS不生效,解析不生效。 VIP产品VIP产品是干什么用的?答:云解析企业版用户,可以通过进入vip产品,对产品进行管理,包含产品的升级,续费,域名绑定,更换域名,解析设置,产品详情。 域名绑定有哪些要求?答:1) 不支持过期域名绑定。2) 绑定的域名需要在购买企业版的账号下。3) 如该域名已绑定过其他企业版套餐,将不支持当前产品版本绑定。 搜索引擎线路如何设置搜索引擎线路?答:搜索引擎线路的设置,可以爬虫快速的抓取到,以此来提高自己网站的收录情况。云解析付费版提供搜索引擎线路、百度、谷歌、必应、有道、雅虎 如何设置搜索引擎线路: 原来设置的搜索引擎线路为何不能使用了?答:此种情况一般是您的企业版产品已过期,系统已为您自动将企业版降级为免费版,原您已使用过的企业版功能,将不再支持,所以会显示为暂停状态。您可以对该条解析记录,根据免费版提供的功能,重新设置搜索引擎线路。

2019-12-01 23:11:38 0 浏览量 回答数 0

问题

MaxCompute常见问题:SQL常见问题

行者武松 2019-12-01 22:09:50 1190 浏览量 回答数 0

问题

如何设计才可以让系统从未分库分表动态切换到分库分表上?【Java问答】42期

剑曼红尘 2020-06-22 11:05:45 34 浏览量 回答数 1

回答

用jquery吧<atarget='_blank'>@13123123用的3.0RC2,他们还在修改那个里程碑版本,我这个是一个springmybatis的分页,但是现在加了查询条件,所以想把dwr给整进来,现在暂时没问题了,用的3.0注解,不过还有个小错误,Noconverterfoundfor'org.apache.ibatis.executor.loader.CglibProxyFactory$EnhancedResultObjectProxy...<atarget='_blank'>@惉惉自喜dwr3.0spring配置版本dwr2版本都玩过还有漏洞所以劝你不要用dwr实在蛋疼<atarget='_blank'>@13123123有干货么?好吧,我不觉得自己问的问题有多低端!回复<aclass='referer'target='_blank'>@惉惉自喜:我终于知道为什么没人回答你这个帖子了。。jquery效率比dwr快不知道多少倍。。<atarget='_blank'>@13123123那可不一定哦,在extjs中还是dwr牛逼吧,并且特定场景下dwr还是比jquery方便些的,我想知道的倒是dwr的性能和jq谁好一些!提问,我这里一直找不到interface下面的类,,求破。。。另外两个类可以

爱吃鱼的程序员 2020-06-22 14:00:03 0 浏览量 回答数 0

回答

回楼主爱因的帖子 以前 旧的雅虎时期,  记得 人工服务,是直接上传身份证复印件,然后对方客服会打电话来确认,一会就解决好了。   现在 手机号码一过期,  邮箱被锁 彻底无语。  之前想改为  邮箱绑定的。也同需要  短信认证 和  人工服务。  打开人工服务, 也没有相关的连接。   干脆 叫 自助服务好了。     人工服务 在哪里?   万一有急事呢。  服务的应急通道呢 。 ------------------------- Re关于阿里云邮箱被锁问题邮箱急用。 麻烦亲,提供如下信息发送到 account@service.aliyun.com绑定新的手机号码,通过手机验证找回一下,谢谢! 1)、绑定的雅虎邮箱账号 2)、雅虎邮箱绑定阿里云邮箱的时间(提供到月份,必填) 3)、雅虎邮箱绑定阿里云邮箱时所在地区(提供到城市,必填) 4) 账号下绑定的原手机号码(当前绑定的手机号码,必填) 5)请提供账号所有者身份证正反面照片 6)如账号下手机不可用,请您提供能够正常使用的手机号码或者备用邮箱,以便通过验证为您设置后您可以自行修 ) 这个 列表 更是有点 扯谈 。  浪费时间。    谁能记住什么时候雅虎邮箱绑定阿里云的。 必填 ?  怎么填。  给我们查询的方法好吗? 用个邮箱还这么不省心。 直接在点开  人工服务 后, 设置专有界面。在专有 界面 ,一一输入好了(就像注册列表那种形式)。   为 什么 大家还需要 一一发送到 你指定的邮箱。 这边急用邮箱 。 无法解决。   ------------------------- Re关于阿里云邮箱被锁问题邮箱急用。 ------------------------- 回4楼newking的帖子 谁绑定的时候,还记得呀。   就是手机套餐 也是可以系统查的。 流程 也是 制定的。 不合理的话要流程干嘛 ------------------------- 回4楼newking的帖子 我现在  需要 修改手机绑定 ,  还让我提供旧的手机号码。 旧的手机号码 两年前就不用了。 就用了几天。 现在一直改不了, 还什么 阿里云绑定雅虎 的月份。 谁会记得这个。   再不行,以后这个邮箱就不用了。太不合理了。

爱因 2019-12-02 02:14:09 0 浏览量 回答数 0

问题

【CSS学习全家桶】416道CSS热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:24 8458 浏览量 回答数 1

问题

MaxCompute百问集锦(持续更新20171011)

隐林 2019-12-01 20:19:23 38430 浏览量 回答数 18

回答

三个字,不可能######回复 @DanceCoder : 没有这种数据库管理员,如果是系统里的管理员,倒是可以通过系统代码,实现管理员只能管理不能查看的逻辑。数据库本身的管理员不行,除非让数据库管理员都进不了数据库,那还管理啥。######回复 @乌龟壳 : 面试官说可以执行增删改查,就是直接在控制台执行SQL语句的那种。######回复 @HankeBoom : 如果有背景就可能不一样,比如说的其实是所谓的数据库管理员之类的,就看看服务器状态那些,数据库都没权限进去######哈哈哈,面试官好坏。。。。。######你确认他不是在出脑筋急转弯? ######不知道,根据我仅有的面试经验,一般都是先问一些基础的问题。我也不知道他为什么问这么摸不着头脑的问题。难道是在考察我的解决问题能力?###### 数据库管理员没有权限看数据库,感觉就像厨师不能进厨房一样。######面试官的意思是不要在管理员权限方面限制不同权限级别的管理员###### 在java程序是对用户名和密码进行了加密后存入数据库的,登录的时候时候再提取数据库的数据进行相反的解密过程,如果一致,才通过 根据你的描述,管理员A又可以管理服务器后台,又可以管理数据库,那只能说明管理员只能为一个(多了就权责不分了),当然最好的是 不要给A日志信息查看权限,要不然就他就可以做到天衣无缝。 以上是个人对数据安全性的理解 下面废话:1:不考虑数据库权限、不考虑加密、不考虑数据库类型,说明数据库安全性有问题。2:面试官的回答“登录修改用户密码和然后就可以登录了。” ,有点sb思维,我都看得到密码了,还用修改后台的密码,还要脱裤子放屁(多此一举) ######哈哈哈,面试官确实好坏###### 这种东西只有在登录的时候处理吧. 数据库都是持久性的东西, 不管如何加密. 只要修改成一个我知道的明文加密的数据不就行了? 所以,还是在登录的后台做处理. 比如加密的是根据用户输入的密码加上用户名之类的处理过的密码. 那么数据库管理员不知道后台的处理逻辑, 修改了数据库也无用. ######长知识了,谢谢######66666###### 看看是否可以这样做 用户的相关信息只通过uuid来查询,并且所有信息与用户名无相关性。用户名和uuid的对应关系拆分成多个记录保存,比如用户名abc ,uuid 123-456-789-012-234 保存成加密后的记录 cde asd ghi fdfd jkl rrr mno !3e pqr rwq 这里第一列是abc加上序号 变成的abc1,abc2...再加密后的字符串,第二列是uuid片段加密后的数据, 客户端通过多次请求再解密获取完整的uuid,然后获取数据,这样除非管理员能解密否则无法获得完整数据 ######就是性能堪忧######这个有点厉害啊###### 引用来自“cys1357”的评论 看看是否可以这样做 用户的相关信息只通过uuid来查询,并且所有信息与用户名无相关性。用户名和uuid的对应关系拆分成多个记录保存,比如用户名abc ,uuid 123-456-789-012-234 保存成加密后的记录 cde asd ghi fdfd jkl rrr mno !3e pqr rwq 这里第一列是abc加上序号 变成的abc1,abc2...再加密后的字符串,第二列是uuid片段加密后的数据, 客户端通过多次请求再解密获取完整的uuid,然后获取数据,这样除非管理员能解密否则无法获得完整数据 可是都说了不允许加密了,实在想不出不加密怎么办了######你需要了解MySQL的“视图”是干嘛的。。。。。。。######视图不是也可以执行改数据操作吗###### 引用来自“cys1357”的评论 看看是否可以这样做 用户的相关信息只通过uuid来查询,并且所有信息与用户名无相关性。用户名和uuid的对应关系拆分成多个记录保存,比如用户名abc ,uuid 123-456-789-012-234 保存成加密后的记录 cde asd ghi fdfd jkl rrr mno !3e pqr rwq 这里第一列是abc加上序号 变成的abc1,abc2...再加密后的字符串,第二列是uuid片段加密后的数据, 客户端通过多次请求再解密获取完整的uuid,然后获取数据,这样除非管理员能解密否则无法获得完整数据 引用来自“钛元素”的评论可是都说了不允许加密了,实在想不出不加密怎么办了 上面的加密只是为了去掉多个片段记录中用户名的相关性,让管理员无法通过搜索找出所有和这个用户名相关的记录项,不需要解密,只是一种变换算法。

kun坤 2020-06-08 10:04:20 0 浏览量 回答数 0

问题

2018MySQL技术问答集锦,希望能给喜欢MySQL的同学一些帮助

技术小能手 2019-12-01 19:31:11 1856 浏览量 回答数 0

问题

【精品问答】Java技术1000问(1)

问问小秘 2019-12-01 21:57:43 37578 浏览量 回答数 11

回答

感谢您提出有趣的问题。干得好: 它逃脱了危险人物, 您的概念完全错误。 实际上“危险人物”是神话,没有神话。和mysql_real_escape_string转义,但只是一个字符串定界符。从这个定义中,您可以得出它的局限性-仅适用于string。 但是,它仍然容易受到其他攻击的攻击,这些攻击可能包含安全字符,但可能有害于显示数据或在某些情况下恶意修改或删除数据。 您在这里混合了所有内容。 说到数据库, 对于字符串,它不是脆弱的。只要您的字符串被引用和转义,它们就不能 “恶意修改或删除数据”。* 对于其他数据类型data-是的,它没有用。但这不是因为它“不安全”,而是因为使用不当。 至于显示数据,我认为它在与PDO有关的问题中是题外话,因为PDO也与显示数据无关。 转义用户输入 ^^^另一个需要注意的错觉! 用户输入与转义绝对无关。从前一个定义中可以了解到,您必须转义字符串,而不是“用户输入”。因此,再次: 您有转义字符串,无论其来源如何 无论源如何,都无法逃脱其他类型的数据。 明白了吗? 现在,我希望您了解转义的局限性以及“危险人物”的误解。 据我了解,使用PDO /预备语句更安全 并不是的。 实际上,我们可以动态添加四个不同的查询部分: 一个字符串 一个号码 标识符 语法关键字。 因此,您可以看到转义仅涵盖一个问题。(但是,当然,如果将数字视为字符串(用引号引起来),则在适用时也可以使其安全) 而准备好的语句涵盖了-嗯-全部2个问题!很大;-) 对于其他两个问题,请参阅我的早期答案:在PHP中,在向数据库提交字符串时,我应该使用htmlspecialchars()还是使用正则表达式来处理非法字符? 现在,函数名称有所不同,因此我的mysql_query,mysql_fetch_array,mysql_num_rows等不再起作用。 那是PHP 用户的另一种严重的幻想,一种自然灾害,一场灾难: 即使使用旧的mysql驱动程序,也永远不要在其代码中使用裸露的API函数!必须将它们放在某种库函数中以供日常使用!(这并不是一个魔术,只是为了使代码更短,更少重复,防错,更一致和可读性更高)。 PDO也是如此! 现在再次提出您的问题。 但是通过使用它们是否可以消除使用mysql_real_escape_string之类的东西的需要? 是。 但是我认为这大致是应该从数据库中获取用户的想法。 不是要获取,而是要向查询添加任何数据! 如果我没记错的话,你必须在PDO:PARAM_STR之后给出一个长度 您可以,但不必。 现在,这一切安全吗? 在数据库安全方面,此代码中没有弱点。没什么要固定的。 为了确保显示安全-只需在该网站上搜索XSS关键字即可。 希望我对此事有所了解。 顺便说一句,对于长插入,您可以使用我有一天写的函数,使用PDO插入/更新帮助器函数 但是,我目前不使用准备好的语句,因为我喜欢使用自制的占位符,而不要使用上面提到的库。因此,要对付下面的riha发布的代码,该代码将短于这两行: $sql = 'SELECT * FROM users WHERE name=?s AND type=?s AND active=?i'; $data = $db->getRow($sql,$_GET['name'],'admin',1); 但是,当然,您也可以使用准备好的语句使用相同的代码。 (yes I am aware of the Schiflett's scaring tales)来源:stack overflow

保持可爱mmm 2020-05-18 11:12:08 0 浏览量 回答数 0

回答

Re“零基础”系列课程如何在ECS上快递搭建一个WordPress站点 怎么获得云币?是不是回复帖子会有? ------------------------- Re“零基础”系列课程如何在ECS上快递搭建一个WordPress站点 谢谢 ------------------------- 第二步,安装完之后,没有80、9000端口 第二步,安装完之后,没有80、9000端口,这个是什么原因,该怎么解决?求助 ------------------------- 回 12楼larryli的帖子 第二步,安装完之后,没有80、9000端口,这个是什么原因,该怎么解决?求助啊 ------------------------- 回 145楼training的帖子 楼主好,感谢您的解答,我刚看到您的回复。想问一下,有没有pw论坛的安装教程?,还有,往后是不是重装系统后,也可以搭建WordPress?多谢 ------------------------- Re“零基础”系列课程如何在ECS上快递搭建一个WordPress站点 楼主你好,WordPress我搭建好了。其中遇到过一个问题,已经解决,向您汇报一下,第一步安装“一键安装包”的时候没有安装成功,后来是将系统换成了“centos”,然后才安装成功,所以,ECS的操作系统最好选用这个。 最后,我已经把站点安装好了,希望楼主后续发一些比较适合菜鸟的WordPress应用技巧,多谢。 ------------------------- 回 209楼training的帖子 楼主大大好,我也遇到了198楼那哥们遇到的问题,站点都建好了,而且用  http:/IP地址/wordpress/   可以打开站点,但是,直接输IP地址或者域名,打开后是403 Forbidden  ,请问这个是什么原因?是不是因为没有进行域名绑定?应该怎么操作。我的域名是今天刚通过备案的,才发现这个问题。诚心求教,多谢! ------------------------- 回 198楼伊奇的帖子 哥们,你的问题解决了吗?403 Forbidden 错误,我也遇到了 ------------------------- 回 197楼上云服务的帖子 又遇到问题了,直接输入域名,显示403 Forbidden,是不是需要域名绑定?我去搜了下相关教程,看的云里雾里,希望能给出后续建站的一些指导。多谢 ------------------------- 回 217楼training的帖子 多谢楼主耐心讲解。是不是还可以修改nginx配置文件,把根目录修改成www下面的wordpress?我看您发的第三个视频有修改nginx的过程,是把根目录www/phpwind改成了www。(我不知道说的对不对,这是我理解的,完全小白啊) ------------------------- Re“零基础”系列课程如何在ECS上快递搭建一个WordPress站点 楼主大大好,我按照您的指导,将那个文件放在了www下面,确实可以打开,但是,网址那一栏还是显示的  http://域名/wordpress. 之后,我修改了nginx配置,将根目录(应该是根目录吧)改成了www/wordpress,之后,输入域名,确实能打开,但是,点击返回首页或者登陆,都失败。 我又将nginx配置还原,就是根目录那块儿,我重新按照 http://域名/wordpress.输入网址,能打来,然后登陆,修改了 wordpress的设置,就是网址 之后,我再修改nginx配置,将根目录改成了www/wordpress,之后,浏览器输入域名,可以打开,然后正常登陆。 不知道这样对不对。我对那个代码完全懵逼,就是觉得从逻辑上应该是域名指向某个文件夹,也就是根目录,具体怎么操作,都是照猫画虎,跟着视频走的。 我的网站是www.pajidy.com 我想问下,为什么首页那个建站时间没有显示,而且导航栏去哪了。这些应该是琐碎的操作了,我就是吐槽一下 ------------------------- 回 172楼training的帖子 大神,我按照171楼和172楼的方法,做了修改,为什么最后登陆phpmyadmin的时候显示 “#1045 无法登录 MySQL 服务器” 密码都是对的 我也去百度了一下,是不是修改phpmyadmin的文件夹地址之后,权限出现了问题? 该怎么解决啊,多谢 ------------------------- 回 228楼风愿的帖子 是不是你之前的安装有问题?还有就是选择合适的操作系统 ------------------------- Re“零基础”系列课程如何在ECS上快递搭建一个WordPress站点 关于出现连接数据库错误,我找了一个教程,不知道是不是这么解决,粘贴出来。(我的网站是:啪几网www.pajidy.com) 以前一直用虚机,这次改用了阿里云服务器,因为这个站点纯粹就是个人喜好建立的,所以主机配置比较低,单核1G,1M独立外网带宽,环境是centos6.5 64位,nginx mysql 位安装管理面板,自己对这方面也完全是白丁,整个服务器环境的搭设全部按照阿里云官方的教程进行,整体弄完后,把自己的WORDPRESS搬上去,也还算顺利。不过运行了半个多余突然出现问题。打开网页的时候显示“建立数据库连接时出错”,通过后台链接MYSQL发现报错无法连接,自己也不太懂,就直接重启了服务器,一切正常。不过出现这种问题心理多少有些担忧,就在后台通过看了下进程,一看发现一个php-fpm的进程有很多子进程,且占用内存非常大,很短时间1G内存空闲就只剩下不到300M,而CPU使用率却很低。 找了个在线压力测试,并发30,进行3分钟压力访问,发现内存很快就所剩无几了,直到低于90M以后突然恢复到270M空闲时,发现MYSQL的进程被KILL了。压力测试结束后,内存并没有被释放。这就是问题所在了。 通过百度查询得知,PHP-CGI会释放内存,但并不会把内存归还系统,所以当过多的PHP-FPM子进程存在时,内存就会一点点被吃干,最终导致溢出。解决方法网上貌似很多,但看起来有点天书,选了一种比较好理解易操作的方法,就是修改php-fpm.conf文件,控制这个进程的数量。 找这个文件我就费了很大劲,网上的文章都不说这个文件在哪,对于小白来说,就有点吃力,最后找到,这个文件在php安装文件夹心下的etc文件夹里,如果是阿里云的话,应该就是 /alidata/server/php/etc里。 打开编辑这个文件,可以通过FTP或者LINUX命令行进行修改。主要涉及几个参数。 pm 这个是设置运行方式的,分别是static(静态)或者dynamic(动态) 默认应该是在214行左右,显示为 pm = dynamic,意思就是动态方式,如果内存小,比如512M,1G,2G之类,建议使用动态。 pm.max_children:静态方式下开启的php-fpm进程数量,这个是有在pm模式为static的情况下生效。 pm.start_servers:动态方式下的起始php-fpm进程数量,这个是pm位dynamic模式下需要设置的参数,意思就是启动运行时建立的起始php-fpm进程数量 大概在230行左右,我设置后的,pm.start_servers = 3 pm.min_spare_servers:动态方式下的最小php-fpm进程数 大概位置在235行,我设置后的,pm.min_spare_servers = 3 pm.max_spare_servers:动态方式下的最大php-fpm进程数量 大概位置在240行,我设置后的,pm.max_spare_servers = 10 还有一个就是pm.max_requests,这个在百度查询都的结果就是接受多少次请求后自动重启进程的,默认是500,不知道这个数值具体是指什么的,因为重启就意味着把php占用的空闲内存释放给系统,不过一旦这个值设置的过低,可能会导致所有的php-fpm进程在几乎同时重启,而重启过程中CPU占用率会飙升,且PHP会拒绝访问请求,所以这个值不能过低,按照我这个小白理解就是宁可适当的减少运行的子进程数,也不能过分的降低这个值。不知道对不对 大概位置在251行,我设置后的,pm.max_requests = 200 这就是我设置后的几个参数,保存后重启服务,再次观察,内存占用率基本稳定在400M,缓慢增长,经过了一晚的再次进行30并发的压力测试,虽然内存和CPU同样会在此时爆发增长,但是这个并发数还是挺住了,且在压力测试结束后,内存大部分被释放给系统了。最后又在wordpress安装了wp-super-cache缓存插件,很大程度降低了访问页面时对服务器的压力。 根据百度查到的,配置php-fpm并非由固定的模式,他基本是要找到一个平衡,对于我这样的小白来说,只能一点点的试,先改成这样运行一段时间观察下,后续再做调整,毕竟自己是小白,很多东西都得摸索,短时间内也无法确定效果,慢慢试吧。 linux命令行  top命令可以查看动态的系统资源占用情况,  ps aux可以查看当时占用系统资源的情况,非动态。 ------------------------- 回 252楼czfcyj的帖子 去看看171楼和172楼,感兴趣也可以看看我的发言 ------------------------- Re“零基础”系列课程如何在ECS上快递搭建一个WordPress站点 求助大神,我的数据库登陆不上去了,密码和用户名都对,显示#1045 错误 ------------------------- 回 247楼training的帖子 求助大神,我的数据库登陆不上去了,密码和用户名都对,显示#1045 错误

原不周 2019-12-01 23:22:13 0 浏览量 回答数 0

回答

"三个字,不可能######回复 <a href=""http://my.oschina.net/hanke"" class=""referer"" target=""_blank"">@DanceCoder : 没有这种数据库管理员,如果是系统里的管理员,倒是可以通过系统代码,实现管理员只能管理不能查看的逻辑。数据库本身的管理员不行,除非让数据库管理员都进不了数据库,那还管理啥。######回复 <a href=""http://my.oschina.net/visualgui823"" class=""referer"" target=""_blank"">@乌龟壳 : 面试官说可以执行增删改查,就是直接在控制台执行SQL语句的那种。######回复 <a href=""http://my.oschina.net/hanke"" class=""referer"" target=""_blank"">@HankeBoom : 如果有背景就可能不一样,比如说的其实是所谓的数据库管理员之类的,就看看服务器状态那些,数据库都没权限进去######哈哈哈,面试官好坏。。。。。######你确认他不是在出脑筋急转弯? ######不知道,根据我仅有的面试经验,一般都是先问一些基础的问题。我也不知道他为什么问这么摸不着头脑的问题。难道是在考察我的解决问题能力?######<span style=""color:#444444;font-family:'Microsoft YaHei', Verdana, sans-serif, 宋体;font-size:14px;line-height:normal;background-color:#FFFFFF;""> 数据库管理员没有权限看数据库,感觉就像厨师不能进厨房一样。######面试官的意思是不要在管理员权限方面限制不同权限级别的管理员###### 在java程序是对用户名和密码进行了加密后存入数据库的,登录的时候时候再提取数据库的数据进行相反的解密过程,如果一致,才通过 根据你的描述,管理员A又可以管理服务器后台,又可以管理数据库,那只能说明管理员只能为一个(多了就权责不分了),当然最好的是 不要给A日志信息查看权限,要不然就他就可以做到天衣无缝。 以上是个人对数据安全性的理解 下面废话:1:不考虑数据库权限、不考虑加密、不考虑数据库类型,说明数据库安全性有问题。2:面试官的回答“登录修改用户密码和然后就可以登录了。” ,有点sb思维,我都看得到密码了,还用修改后台的密码,还要脱裤子放屁(多此一举) ######哈哈哈,面试官确实好坏###### 这种东西只有在登录的时候处理吧. 数据库都是持久性的东西, 不管如何加密. 只要修改成一个我知道的明文加密的数据不就行了? 所以,还是在登录的后台做处理. 比如加密的是根据用户输入的密码加上用户名之类的处理过的密码. 那么数据库管理员不知道后台的处理逻辑, 修改了数据库也无用. ######长知识了,谢谢######66666###### 看看是否可以这样做 用户的相关信息只通过uuid来查询,并且所有信息与用户名无相关性。用户名和uuid的对应关系拆分成多个记录保存,比如用户名abc ,uuid 123-456-789-012-234 保存成加密后的记录 cde asd ghi fdfd jkl rrr mno !3e pqr rwq 这里第一列是abc加上序号 变成的abc1,abc2...再加密后的字符串,第二列是uuid片段加密后的数据, 客户端通过多次请求再解密获取完整的uuid,然后获取数据,这样除非管理员能解密否则无法获得完整数据 ######就是性能堪忧######这个有点厉害啊###### 引用来自“cys1357”的评论 看看是否可以这样做 用户的相关信息只通过uuid来查询,并且所有信息与用户名无相关性。用户名和uuid的对应关系拆分成多个记录保存,比如用户名abc ,uuid 123-456-789-012-234 保存成加密后的记录 cde asd ghi fdfd jkl rrr mno !3e pqr rwq 这里第一列是abc加上序号 变成的abc1,abc2...再加密后的字符串,第二列是uuid片段加密后的数据, 客户端通过多次请求再解密获取完整的uuid,然后获取数据,这样除非管理员能解密否则无法获得完整数据 可是都说了不允许加密了,实在想不出不加密怎么办了######你需要了解MySQL的“视图”是干嘛的。。。。。。。######视图不是也可以执行改数据操作吗###### 引用来自“cys1357”的评论 看看是否可以这样做 用户的相关信息只通过uuid来查询,并且所有信息与用户名无相关性。用户名和uuid的对应关系拆分成多个记录保存,比如用户名abc ,uuid 123-456-789-012-234 保存成加密后的记录 cde asd ghi fdfd jkl rrr mno !3e pqr rwq 这里第一列是abc加上序号 变成的abc1,abc2...再加密后的字符串,第二列是uuid片段加密后的数据, 客户端通过多次请求再解密获取完整的uuid,然后获取数据,这样除非管理员能解密否则无法获得完整数据 引用来自“钛元素”的评论可是都说了不允许加密了,实在想不出不加密怎么办了 上面的加密只是为了去掉多个片段记录中用户名的相关性,让管理员无法通过搜索找出所有和这个用户名相关的记录项,不需要解密,只是一种变换算法。 "

montos 2020-06-04 16:18:39 0 浏览量 回答数 0

回答

"三个字,不可能######回复 <a href=""http://my.oschina.net/hanke"" class=""referer"" target=""_blank"">@DanceCoder : 没有这种数据库管理员,如果是系统里的管理员,倒是可以通过系统代码,实现管理员只能管理不能查看的逻辑。数据库本身的管理员不行,除非让数据库管理员都进不了数据库,那还管理啥。######回复 <a href=""http://my.oschina.net/visualgui823"" class=""referer"" target=""_blank"">@乌龟壳 : 面试官说可以执行增删改查,就是直接在控制台执行SQL语句的那种。######回复 <a href=""http://my.oschina.net/hanke"" class=""referer"" target=""_blank"">@HankeBoom : 如果有背景就可能不一样,比如说的其实是所谓的数据库管理员之类的,就看看服务器状态那些,数据库都没权限进去######哈哈哈,面试官好坏。。。。。######你确认他不是在出脑筋急转弯? ######不知道,根据我仅有的面试经验,一般都是先问一些基础的问题。我也不知道他为什么问这么摸不着头脑的问题。难道是在考察我的解决问题能力?######<span style=""color:#444444;font-family:'Microsoft YaHei', Verdana, sans-serif, 宋体;font-size:14px;line-height:normal;background-color:#FFFFFF;""> 数据库管理员没有权限看数据库,感觉就像厨师不能进厨房一样。######面试官的意思是不要在管理员权限方面限制不同权限级别的管理员###### 在java程序是对用户名和密码进行了加密后存入数据库的,登录的时候时候再提取数据库的数据进行相反的解密过程,如果一致,才通过 根据你的描述,管理员A又可以管理服务器后台,又可以管理数据库,那只能说明管理员只能为一个(多了就权责不分了),当然最好的是 不要给A日志信息查看权限,要不然就他就可以做到天衣无缝。 以上是个人对数据安全性的理解 下面废话:1:不考虑数据库权限、不考虑加密、不考虑数据库类型,说明数据库安全性有问题。2:面试官的回答“登录修改用户密码和然后就可以登录了。” ,有点sb思维,我都看得到密码了,还用修改后台的密码,还要脱裤子放屁(多此一举) ######哈哈哈,面试官确实好坏###### 这种东西只有在登录的时候处理吧. 数据库都是持久性的东西, 不管如何加密. 只要修改成一个我知道的明文加密的数据不就行了? 所以,还是在登录的后台做处理. 比如加密的是根据用户输入的密码加上用户名之类的处理过的密码. 那么数据库管理员不知道后台的处理逻辑, 修改了数据库也无用. ######长知识了,谢谢######66666###### 看看是否可以这样做 用户的相关信息只通过uuid来查询,并且所有信息与用户名无相关性。用户名和uuid的对应关系拆分成多个记录保存,比如用户名abc ,uuid 123-456-789-012-234 保存成加密后的记录 cde asd ghi fdfd jkl rrr mno !3e pqr rwq 这里第一列是abc加上序号 变成的abc1,abc2...再加密后的字符串,第二列是uuid片段加密后的数据, 客户端通过多次请求再解密获取完整的uuid,然后获取数据,这样除非管理员能解密否则无法获得完整数据 ######就是性能堪忧######这个有点厉害啊###### 引用来自“cys1357”的评论 看看是否可以这样做 用户的相关信息只通过uuid来查询,并且所有信息与用户名无相关性。用户名和uuid的对应关系拆分成多个记录保存,比如用户名abc ,uuid 123-456-789-012-234 保存成加密后的记录 cde asd ghi fdfd jkl rrr mno !3e pqr rwq 这里第一列是abc加上序号 变成的abc1,abc2...再加密后的字符串,第二列是uuid片段加密后的数据, 客户端通过多次请求再解密获取完整的uuid,然后获取数据,这样除非管理员能解密否则无法获得完整数据 可是都说了不允许加密了,实在想不出不加密怎么办了######你需要了解MySQL的“视图”是干嘛的。。。。。。。######视图不是也可以执行改数据操作吗###### 引用来自“cys1357”的评论 看看是否可以这样做 用户的相关信息只通过uuid来查询,并且所有信息与用户名无相关性。用户名和uuid的对应关系拆分成多个记录保存,比如用户名abc ,uuid 123-456-789-012-234 保存成加密后的记录 cde asd ghi fdfd jkl rrr mno !3e pqr rwq 这里第一列是abc加上序号 变成的abc1,abc2...再加密后的字符串,第二列是uuid片段加密后的数据, 客户端通过多次请求再解密获取完整的uuid,然后获取数据,这样除非管理员能解密否则无法获得完整数据 引用来自“钛元素”的评论可是都说了不允许加密了,实在想不出不加密怎么办了 上面的加密只是为了去掉多个片段记录中用户名的相关性,让管理员无法通过搜索找出所有和这个用户名相关的记录项,不需要解密,只是一种变换算法。 "

montos 2020-06-04 16:18:47 0 浏览量 回答数 0

回答

ReAliDDNS基于云解析API的DDNSC 基于DTSDAO发布的AliDDNS 3.0继续开发至3.6.0,算是一个成熟的版本了,今天刚编译出来,分享给大家。 需要的下载吧 AliDDNS v3.6.0 v3.6.0更新内容: 1、版本号更新至3.6.0 2、著作信息放入系统托盘右键菜单“关于”。 3、增加随系统启动功能。 4、增加软件启动隐藏至托盘功能。 5、增加日志记录、超过10000行自动转储至软件目录功能。 6、软件功能实现根据使用习惯调整。 7、配置文件名称更改,参数增加。 8、完善窗体标签功能实现时的更新逻辑。 9、完善当域名记录不存在时自动添加。 10、程序代码调整,有兴趣的可以git。 ------------------------- ReAliDDNS基于云解析API的DDNSC 这个主题时间比较久了,看了一下,大家所提到的问题在v3.6.0版本已经解决。 下一个版本功能有需求的可以提提。 居然无法发表主题,没有权限,郁闷,有权限的帮忙发到新主题,可以让更多人看到、用到、反馈,谢了先! ------------------------- ReAliDDNS基于云解析API的DDNSC 再次提交一个新的版本v3.7.0.1: 1、版本号更新至3.7.0.1 2、著作信息放入系统托盘右键菜单“关于”。 3、增加随系统启动功能。 4、增加软件启动隐藏至托盘功能。 5、增加日志记录、超过10000行自动转储至软件目录功能。 6、软件功能实现根据使用习惯调整。 7、配置文件名称更改,参数增加。 8、完善窗体标签功能实现时的更新逻辑。 9、完善当域名记录不存在时自动添加。 10、增加手工指定一个IP,用于当不能从网址获取WAN口IP时救急使用。由于通过http方式从网站获取WAN口IP技术,是从返回信息过滤抓取xxx.xxx.xxx.xxx字串,有时候返回信息包含内容过多,会过滤抓取失败,因此,有必要保留一个手工指定IP的功能。 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.7.1.1 1、增加系统托盘图标状态更新功能:红色-获取WAN口IP或者获取域名绑定IP失败。黄色-获取成功,但WAN口IP和域名绑定IP不一致。绿色-获取成功,WAN口IP和域名绑定IP一致。灰色-WAN口网络不通。 2、修改代码和窗体标签刷新BUG。 3、修复系统托盘图标刷新BUG。 ------------------------- 回 34楼飞翔的笨猫的帖子 ttl值使用的系统默认值,免费版本是600秒,主要是阿里云解析有好多版本,不知道修改后能否有效果,我增加一个参数,你们测试看看。 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.8.0.0 1、增加TTL参数。 2、修复代码BUG。 ------------------------- ReAliDDNS基于云解析API的DDNSC 增加了TTL参数,请大家测试反馈信息哈。 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.8.1.0 1、在配置文件中对accessKeyId和accessKeySecret进行加密存储。注意现有配置文件中未加密参数将失效。 ------------------------- Re回 37楼wisdomwei的帖子 引用第39楼飞翔的笨猫于2018-04-22 10:31发表的 回 37楼wisdomwei的帖子 : win10系统,勾选启动时最小化和日志自动转储 不起作用,随系统启动后,第一次无法自动绑定域名,必须手动点击立即更新一次才行 日志如下: 2018/4/22 10:28:32 运行出错!信息: System.UnauthorizedAccessException: 对注册表项“HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun”的访问被拒绝。    在 Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str)    在 Microsoft.Win32.RegistryKey.CreateSubKeyInternal(String subkey, RegistryKeyPermissionCheck permissionCheck, Object registrySecurityObj, RegistryOptions registryOptions) ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1776828][/url] 1、日志第一行报错是因为系统禁止写入注册表了,当随系统启动选定时,软件会写入系统注册表,看看是否杀毒软件拦截或者禁止了。 2、自动最小化不起作用目前无法复现错误,你再观察一下,把错误日志贴出来。 3、日志转储错误,建议使用管理员模式运行程序,有可能是文件权限原因。 如果最小化和日志转储都不起作用,建议把配置文件删除,重新运行软件,录入参数再测试保存后试一下看看是否恢复正常。 ------------------------- Re回 39楼飞翔的笨猫的帖子 引用第40楼飞翔的笨猫于2018-04-22 10:33发表的 回 39楼飞翔的笨猫的帖子 : 并且 win10 系统 设置ttl值后 无法保存设置 电脑重启后 还是回复默认600 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1776829][/url] 根据你两个帖子反馈的情况,建议你把设置文件删除,然后使用管理员模式运行一下程序,重新设置一下试试看,如果问题依旧,把错误日志贴出来看看。 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.8.2.1 1、增加角色权限检测。 2、更多功能日志输出。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第46楼佳盟自动化于2018-04-22 17:58发表的 ReAliDDNS基于云解析API的DDNSC : 见识了  我想发链接可以吗? [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1776874][/url] 可以,就是拿出来分享的哈 ------------------------- Re回 43楼wisdomwei的帖子 引用第45楼飞翔的笨猫于2018-04-22 17:17发表的 回 43楼wisdomwei的帖子 : 用了 最新的3.8.2.1版 可以自启动 设置也能保存 ddns也能自动更新,但是日志还是报错,你看下: 2018/4/22 17:06:20 计算机名: Work-PC 2018/4/22 17:06:20 当前用户: he* 2018/4/22 17:06:20 角色信息:Work-PChe* 2018/4/22 17:06:20 当前用户需要文件写入和注册表操作权限,否则相关参数不起作用! ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1776869][/url] 提示注册表访问被拒绝,原因可能是注册表访问策略被修改,或者安装了杀毒软件,例如360,把软件对注册表的访问拦截了,如果是360,看看拦截清单里面有没有,有的话就删除拦截记录,再添加一条信任记录。 如果不是360等杀毒软件,就编辑一下组策略,把当前用户对注册表访问通过。 ------------------------- ReAliDDNS基于云解析API的DDNSC 下一个版本打算增加一个自动检测升级功能,实现无人值守的自动检测升级,不用再手工替换升级版本了,目前开发中。 ------------------------- 回 50楼清者自清12的帖子 使用了c#默认的控件textbox,mask设置成了000.000.000.000,代码里面校验了不能超出255.255.255.255,使用输入时稍微将就一下,以后有时间会重新设计一下控件,默认textbox处理录入格式时比较蠢。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第53楼清者自清12于2018-06-08 13:56发表的 ReAliDDNS基于云解析API的DDNSC : 还有个,获取IP那两个网址能不能自动切换,当一个网址获取不到IP时,自动切换到另外一个网址。 软件启动过程中,当获取不到IP时,软件就会卡死好一会, [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1782201][/url] 下载最新版本,已经添加了www.net.cn获取IP的网址,当然可以自行录入地址,地址获取返回含有xxx.xxx.xxx.xxx格式的ip的,函数会自动过滤其它信息,但内容含有多个ip就会失败。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第55楼lhpdir于2018-06-13 23:08发表的 ReAliDDNS基于云解析API的DDNSC : 如果设置时间3600秒,左边显示的是360,不过10秒掉1秒,是作者有意为之? [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1782899][/url] 是窗体控件格式问题,宽度不够,新版本已经增加了宽度,下载新版本即可。至于10秒掉一秒,估计是cpu时钟运行与程序控件显示不同步造成的,理论上应该是毫秒,本程序使用的是C#自带Timer控件,没有修改过。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第54楼lhpdir于2018-06-13 21:56发表的 ReAliDDNS基于云解析API的DDNSC : 解压密码? [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1782895][/url] winrar压缩,不需要解压密码 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.8.4.0   1、增加Ngrok网络穿透功能。 2、调整倒计时控件宽度,修复当倒计时超过3位时被遮挡的问题。 3、精简代码。 ------------------------- Re回 51楼wisdomwei的帖子 引用第52楼清者自清12于2018-06-02 13:03发表的 回 51楼wisdomwei的帖子 : 兄台,whatismyip.akamai.com这个网址我这边有些地方经常获取不到IP,然后WAN口地址就变成0.0.0.0  软件能不能加一条,如果IP是0.0.0.0则不更新。要不然一获取不到IP,域名就绑定0.0.0.0了 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1781486][/url] 已经实现自主添加其他查询网址,启用自动运行时会逐个查询。 v3.8.5.0 1、设置修改实时保存。 2、可添加多个公网IP查询网址,自动运行是逐个查询,当有返回值时停止。 3、简化代码。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第53楼清者自清12于2018-06-08 13:56发表的 ReAliDDNS基于云解析API的DDNSC : 还有个,获取IP那两个网址能不能自动切换,当一个网址获取不到IP时,自动切换到另外一个网址。 软件启动过程中,当获取不到IP时,软件就会卡死好一会, [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1782201][/url] 已经实现自主添加其他查询网址,启用自动运行时会逐个查询。 v3.8.5.0 1、设置修改实时保存。 2、可添加多个公网IP查询网址,自动运行是逐个查询,当有返回值时停止。 3、简化代码。 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.8.5.0 1、设置修改实时保存。 2、可添加多个公网IP查询网址,自动运行是逐个查询,当有返回值时停止。 3、简化代码。 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.8.6.0   1、修改代码,.net框架版本由4.5降低到4.0,可在WinXP系统运行,WinXP系统最高支持.net 4.0。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第65楼purelyc于2018-07-21 18:44发表的 ReAliDDNS基于云解析API的DDNSC : 感谢作者的软件,请问有没有方式做成可以为域名下多个主机记录做记录值的,现在只能做一个有点浪费域名了 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1786873][/url] 你的意思是动态刷新几个A记录的IP地址吗?把几个记录刷新同一个IP地址还是不同IP地址? 或者你的意思是做一个管理域名的软件? ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第68楼qz_陈sir于2018-07-22 13:08发表的 ReAliDDNS基于云解析API的DDNSC : 楼主 发现你这个工具有个问题  用了这个工具  有设置了开机启动  其他用户远程桌面注销不了  必须把工具先退出才能注销   测了3个2003的服务器都是这样 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1786987][/url] 如果win2003服务器,建议查看一下系统日志,看看远程登录之后都执行了什么操作,最好把相关日志贴出来看看。 远程桌面注销不了这种情况第一次遇到,我试试看能否重现你说的情况。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第70楼purelyc于2018-07-22 17:21发表的 ReAliDDNS基于云解析API的DDNSC : 请问一个问题,启动后不手动点一次测试连接,域名IP就无法自动绑定 自动更新时间到达后提示 2018/7/22 17:02:25    updateDomainRecord() Exception:  Aliyun.Acs.Core.Exceptions.ClientException: InvalidParameter : The parameter value RecordId is invalid.    在 Aliyun.Acs.Core.DefaultAcsClient.ParseAcsResponse[T](AcsRequest`1 request, HttpResponse httpResponse) ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1787006][/url] 1、只有勾选了启动自动运行,软件启动才会自动分别查询阿里云DNS的A记录和WAN口IP,查询之后对比两者IP是否一致,一致就静默,等待下一次更新时间到来,不一致就立即更新。 如果没有勾选,软件启动后需要手工点击测试。 2、当返回你贴出来的日志时,说明你之前已经成功更新过A记录,但再次运行时,你只修改了域名,没有经过测试和添加到阿里云DNS,造成阿里云DNS里面的recordid对应的域名和你现在配置文件里面的不一致,正确的方法是每次修改之后都测试一下,如果不存在会提醒添加记录。 下载使用最新版本v3.8.6.0,日志记录里面会有很明确的提醒。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第73楼cxq82于2018-07-27 11:03发表的 ReAliDDNS基于云解析API的DDNSC : 帖主好! 非常感谢,开发这个插件分享给大家,这个实在找到辛苦,最终还是找到这里了。 有个疑问反馈下: 1、局域网内2机器同时开程序,更新同一域名,过会儿会无法更新域名;阿里后台发现有2个A记录,不懂是阿里故意设置的还是bug。 2、上述情况,关闭一台机器;在另一地域,用此程序更新另一个二级域名,也出现无法更新现象;是否同一key 不能多台电脑使用呢? ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1787650][/url] 1、对于同一局域网内的两台机器同时运行AliDDNS.exe,更新同一域名a.demo.com,只要录入没有问题,应该不会出现a.demo.com在阿里云DNS里面有两个recordid,请检查录入是否正确。如果问题依旧,请把两台机器的软件运行界面截图和运行日志一起贴出来,还有阿里云控制台A记录的截图,我分析一下看看是否是软件BUG。 2、不同局域网,只要WAN口IP不同,不管地域是否是否相同,更新同一域名,只会导致阿里云DNS该A记录的IP不断变化。 3、不管是否是同一局域网,同一accesskey和accesssecret,可以更新任意不同A记录的IP,如果不能成功,请检查accesskey和accesssecret是否正确,或者网络路由是否有防火墙限制,点击【测试】试一下。可以把日志贴出来看看,分析一下问题。 据我所知,目前阿里云还没有限制DNS中A记录更新的频率和次数。 我见过宽带使用长城宽带的,每次更新WAN口IP都不同,奇葩的不得了,最后ngrok网络穿透了事。 ------------------------- Re回 72楼wisdomwei的帖子 引用第75楼kakalin于2018-07-31 15:39发表的 回 72楼wisdomwei的帖子 : 帖主好,我也遇到这样的问题,随系统自动启动已经开了,但是还是要每次手动点击测试连接才能正常工作。 日志: 2018/7/31 15:31:48 计算机名: xxxx 2018/7/31 15:31:48 当前用户: xxx 2018/7/31 15:31:48 角色信息:xxxx ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1788169][/url] 关键的出错信息在这里: 2018/7/31 15:32:03 updateDomainRecord() Exception:  Aliyun.Acs.Core.Exceptions.ClientException: InvalidParameter : The parameter value RecordId is invalid. 之前已经成功运行过,阿里云DNS已经添加了域名并返回recordid了,但是,你再次启动时,配置文件里面的recordid和域名与阿里云DNS里面的recordid和域名不一致! 可能原因:1、本地修改域名后没有测试并添加。2、本地修改了recordid。3、本地配置文件被手工修改。4、阿里云DNS对应记录被手工修改。 解决办法:修改域名后点击测试和添加,确保生效,不要手工修改本地配置文件和阿里云DNS服务器里面的域名记录,除非你知道是在干什么。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第81楼鱼花于2018-08-14 20:58发表的 ReAliDDNS基于云解析API的DDNSC : 用上3.8.6版,乍么github.com/dtsdao/AliDDNS只有verson 1.0 ??? 3.8.6版在电算机重启后不会得自动点击测试连接,只能手工。要是人在外边,刚好ip又给营运商变了就不能及时更新正确ip了 补充:我的win 2012 打上自启了,能自启,就是不能解析? [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1789959][/url] 原作者已经不维护更新了,我fork过来继续更新。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第82楼鱼花于2018-08-14 21:18发表的 ReAliDDNS基于云解析API的DDNSC : 018/8/14 21:08:57 计算机名: computer 2018/8/14 21:08:57 当前用户: Administrator 2018/8/14 21:08:57 角色信息:computerAdministrator 2018/8/14 21:08:57 当前用户需要文件写入和注册表操作权限,否则相关参数不起作用! ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1789962][/url] 稍后我会更新一下代码,当IP为0.0.0.0的时候不更新阿里云DNS记录,仅提示未能获取IP,需要手工获取。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第80楼服务器云于2018-08-10 22:56发表的 ReAliDDNS基于云解析API的DDNSC : 这个就是根据家里的IP 变化通过api动态的更新DNS? 有延迟么?python可以做么? [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1789426][/url] 完全可以,很简单。 ------------------------- Re回 28楼wisdomwei的帖子 引用第79楼flcz于2018-08-10 16:24发表的 回 28楼wisdomwei的帖子 : 有没有获取到0.0.0.0,不修改记录的功能。我现在可能是网络原因,老被改为0.0.0.0 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1789379][/url] 稍后我会更新一下代码,当获取IP为0.0.0.0时不更新阿里云记录, 提示手工更改。 你可以尝试添加其他获取IP的地址的网址,看能否自动获取。例如:http://www.net.cn/static/customercare/yourip.asp http://ip.qq.com/ http://www.3322.org/dyndns/getip ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第78楼鱼花于2018-08-07 09:43发表的 ReAliDDNS基于云解析API的DDNSC : win 2012点击验证安钮没反应 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1788817][/url] 是“测试连接”按钮吧?点击后稍等,如果网络状况不佳,或者设置错误,会有延迟。 程序运行需要.NET FRAMEWORK 4.0以上版本。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第77楼kakalin于2018-08-01 21:07发表的 ReAliDDNS基于云解析API的DDNSC : 找到原因了,本地配置文件无法保存recordid,手动写进去以后就正常了。 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1788345][/url] 不建议修改recordid,除非你明白是在做什么?修改域名后测试连接,如果DNS记录存在,会自动获取recordid,如果不存在,会提示添加新记录。 ------------------------- Re回 72楼wisdomwei的帖子 引用第75楼kakalin于2018-07-31 15:39发表的 回 72楼wisdomwei的帖子 : 帖主好,我也遇到这样的问题,随系统自动启动已经开了,但是还是要每次手动点击测试连接才能正常工作。 日志: 2018/7/31 15:31:48 计算机名: xxxx 2018/7/31 15:31:48 当前用户: xxx 2018/7/31 15:31:48 角色信息:xxxx ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1788169][/url] 勾选随系统启动自动运行即可。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第90楼kanxiji于2018-08-18 23:34发表的 ReAliDDNS基于云解析API的DDNSC : 楼主你好 你的东西很好用, 提个建议:TTL和更新秒数可以分别设置 [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1791200][/url] 抱歉是个BUG,升级对配置文件读写时参数错误,已经修复。感谢提供建议! ------------------------- ReAliDDNS基于云解析API的DDNSC v.3.8.6.2 1、修复配置文件参数TTL和WaitingTime写入BUG。 2、增加更新逻辑,当获取WAN口IP返回0.0.0.0时,不更新阿里云DNS记录,提示手工修改。 ------------------------- ReAliDDNS基于云解析API的DDNSC v3.8.6.3 1、修改测试存储逻辑,锁定Recordid编辑框,避免添加域名成功后,手工修改造成配置文件存储Recordid与服务器不一致时造成的自动更新出错。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第94楼鱼花于2018-08-28 11:00发表的 ReAliDDNS基于云解析API的DDNSC : v3.8.6.3  ,在win2012下点测试,没能得到本地ip 勾选自启,关闭退出,重新启动,这选项是空的。 之前下载的版本,在win 2012 r2下手动还能用就是机器重启后,没能得到本机ip,要手机点测试后才正常。 ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1792007][/url] 1、点击【测试连接】是测试阿里云账号信息设置是否正确,如果正确就会测试录入的域名记录是否存在,如果存在就返回recordid,如果不存在就提示添加。 2、获取本地WAN口IP点击【获取WAN口IP】按钮,而不是【测试连接】按钮。 3、如果需要自动更新,需要设置自动更新倒计时秒数,勾选自动更新,勾选随系统启动自动运行。 感觉你对软件运行界面设置不熟悉,建议详细看一下软件运行界面,配置修改日志输出框都会有提示,也详细看一下。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第96楼saoian于2018-08-30 16:02发表的 ReAliDDNS基于云解析API的DDNSC : 你好: 程序运行时提示,版本检测程序update.exe未找到,能把这个文件发出来吗? 另外在运行升级时提示,软件运行目录下没有找到updateinfo.txt,是否是直接在运行目录下新建一个updateinfo.txt文件就可了? [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1792277][/url] 抱歉自动升级功能的update.exe还有些BUG,还没有放出来,请先取消勾选【关于】菜单下的【自动检测升级】,不勾选时其它功能可正常使用,等update.exe放出来您再勾选这个功能菜单。 ------------------------- ReReAliDDNS基于云解析API的DDNSC 引用第98楼daoyuanjiao于2018-09-14 11:12发表的 ReAliDDNS基于云解析API的DDNSC : 可以具体描述一下里面的ngrok的使用吗?我的配置后一直无法访问。但是单独打开ngrok设置令牌后,启动ngrok http 80 是可以访问的!谢谢!我i一直显示“Ngrok功能启用,ngrok.exe将自动加载!本机浏览器打开:127.0.0.1:4040 查看运行状态。”但是打开127.0.0.1:4040一直显示无法访问! [url=https://bbs.aliyun.com/job.php?action=topost&tid=289624&pid=1793763][/url] ngrok的详细使用方法你从官网看一下,我这里简单说两个方法: 1、使用官网网址映射。在ngrok官网 注册一个免费账号,从官方下载编译好的ngrok.exe程序,跟AliDDNS.EXE放在一个文件夹下,然后根据页面提示,填写参数,保存,勾选后自动运行。 2、如果自己有服务器的话,从github fork一下ngrok源码到本地,直接编译一个ngrokd出来,在服务器上运行,一般运行的方式是./bin/ngrokd -tlsKey="server.key" -tlsCrt="server.crt" -domain="ngrok.xxxx.cn" -httpAddr=":8081" -httpsAddr=":8082" -tunnelAddr=":8083" &  然后再根据编译时生成的证书,编译一个win的ngrok.exe程序来,跟AliDDNS.exe放在一个文件夹下,根据服务端的配置,令牌为空,地址为:ngrok.xxx.cn:8083,要穿透的二级域名假设为demo,那么穿透后的完整URL是http://demo.ngrok.xxx.cn:8081 访问http服务, 或者https://demo.ngrok.xxx.cn:8082 访问https服务,页面是否能打开,取决于80端口上是否有服务可以访问。内网的其他服务端口也是一样,假设ftp服务跑在21端口上,穿透WAN端口是2221,那么访问URL是ftp://demo.ngrok.xxx.cn:2221,不知道说明白了吗? ------------------------- 回 102楼estas的帖子 我用的北京联通的光纤,没有任何问题。 把日志贴出来。 DDNS跟线路关系不大,阿里云是智能路由,看本地DNS设置,或者杀毒软件设置。 ------------------------- 回 100楼daoyuanjiao的帖子 不支持,仅在windows平台可用,.net3.5以上。

wisdomwei 2019-12-02 02:58:27 0 浏览量 回答数 0

问题

ES 的分布式架构原理能说一下么(ES 是如何实现分布式的啊)?【Java问答学堂】26期

剑曼红尘 2020-05-26 20:30:13 41 浏览量 回答数 1

问题

深入理解Magento - 第一章 - Magento强大的配置系统:报错 

kun坤 2020-06-04 21:14:35 5 浏览量 回答数 1

问题

深入理解Magento - 第一章 - Magento强大的配置系统 - 配置报错

montos 2020-06-04 15:18:56 4 浏览量 回答数 1

问题

关于“建立数据库连接时出错”的解决方法

原不周 2019-12-01 20:58:11 13238 浏览量 回答数 5

问题

SSH面试题

琴瑟 2019-12-01 21:46:22 3489 浏览量 回答数 0

问题

开发网站客户端第二弹? 400 报错

爱吃鱼的程序员 2020-05-29 20:17:04 0 浏览量 回答数 1

回答

首先“缓存”Cache这个东西是干什么的,我们应该先有些基本的了解。要是不太明白的可以看看网上的解释:http://baike.baidu.com/view/907.htm 简单讲,阿里云OCS提供的功能就是提供对热点数据的高速访问。在使用OCS之前(或者在使用任何一种缓存服务之前),我们都应该明白关于缓存的这么几点: 缓存里的数据不是持久化保存的,也就是说它像是电脑里的内存,而不像硬盘;我们不能指望OCS里的数据一直保存不丢失。如果你真的需要存储持久化的数据,也许你应该出门左转找阿里云OSS(开发存储服务); 缓存里存的应该是“热点”数据。遵循常常出现的“20-80法则”,通常程序应用中都有一定比例的数据常常被请求访问,这就是所谓的热点数据,OCS正是为这种数据设计存在的。假定我们的程序中有100个数据,每次访问这些数据的概率完全是均匀分布的1/100,那么使用缓存的效果就不会太好,因为这其中不存在热点数据。 数据逐出。我们可以决定哪些数据是热点数据被放到缓存当中,但是如果我们的缓存容量不够大,这些热点数据中某些最近较少被用到的数据还是会被“挤出去”,这种行为叫做数据逐出。如果想减少出现这种情况,我们可以购买更高容量的OCS。 -------------------------         在开始使用之前,关于阿里云OCS,我们还需要知道以下这些事: 阿里云OCS仅支持阿里云内网访问,不支持公网访问。也就是说,我们用办公室或者家里的电脑(都属于公网)是无法连上阿里云OCS的。为什么会这样呢?因为缓存服务的根本目标是要提供低延迟的高速访问,而从公网电脑来连接OCS服务器的场景下,公网的网络环境是不可控的,可能出现延迟很高甚至断连接的情况,这使得缓存服务无法保证“高速、低延迟”的基本特性,所以阿里云OCS是不支持公网直接访问的。如果觉得高延迟的情况对于我们的应用也能接受,那么我们应该去选择阿里云其他的产品(比如OSS开放存储服务),而不应该选择OCS缓存服务。 阿里云OCS需要与ECS(阿里云服务器)配合使用,而且只能与本地区节点的ECS连通。这一点与上一条相关。OCS只能从阿里云内网访问,也就是说我们只能从阿里云ECS上才能访问并使用OCS服务。所以我们在官网购买OCS的时候,会看到提示信息说需要至少有一台ECS才能买OCS。另外,阿里云ECS是分地区节点的,比如北京、杭州、青岛等,我们在购买OCS缓存的时候也要选相应的地区节点。北京的ECS只能访问北京的OCS,而不能访问杭州或青岛的OCS。 阿里云OCS是按购买量收费的,而不是按使用量收费。这点需要提醒新同学们注意,在我们购买了OCS缓存之后,计费就已经开始了,即使我们还没有真正使用缓存。也就是说,我们买了1G的OCS缓存后,即使目前使用量为0,系统也会按照1G的标准来计费。所以我们在购买OCS的时候,要选取适合我们业务数据需要的缓存档位。当然了,阿里云OCS也提供在线升降缓存容量的功能。也就是说,如果我们在使用了一段时间之后,发现购买的OCS缓存不够用了(或者缓存使用量太低),我们可以在线的对已有的OCS实例进行升档(或者降档),而OCS缓存服务不会被中断。 阿里云OCS对于存贮的对象大小是有限制的。缓存通常对其内部存储的数据尺寸是有限制的,阿里云OCS也一样。目前OCS支持存储的数据对象的上限是1,000,000Byte。如果要存的值超过这个限制,我们应该考虑把数据压缩,或从逻辑上分成不同键存储的几个值。 ------------------------- 现在我们开始在阿里云官网上购买OCS实例  http://buy.aliyun.com/ocs  首先我们需要已经有了一台阿里云ECS,否则我们无法在这个页面成功购买OCS。购买的第一步,我们先要确定选择买哪个地区的OCS;这个很重要,如上面所说,如果我们的ECS是属于北京,而我们在这里购买了杭州的OCS,那么这两者是无法配合协同工作的。所以,在购买OCS的时候一定要选择应用服务器ECS所在地区的OCS。下一步是要选择OCS缓存容量。我们要购买多大的缓存,这个取决于我们对自身业务应用中热点数据总量大小的判断。如果一时难以准确判断数据量,也不用担心:我们可以先买一个大致容量的OCS(比如1GB),随后在使用过程中,通过OCS控制台提供的监控功能,我们可以了解到目前OCS缓存的使用量等数据,然后可以自主的调整所需的缓存量,购买更大的缓存(比如升到5GB)或者减少已购的缓存量(比如降到512MB),阿里云会根据我们选择的新配置来调整对应的收费。此外在选择缓存容量的时候,要知道不同容量的缓存档位对应着不同的性能配额,具体来说包括两个指标:吞吐量带宽与每秒请求处理数(QPS)。比如以现在的配额标准,1GB的OCS缓存对应5MB/sec的吞吐量带宽和3000次/sec的请求处理峰值。当我们使用OCS的时候,如果数据量传输的带宽超过了5MB/s, 或者每秒的请求数超过了3000次,都会触发性能配额控制机制,导致某些请求无法返回正常结果。在确定了地区和缓存容量之后,我们就可以直接下单购买OCS了。 ------------------------- 在成功购买OCS之后,我们的联系邮箱和手机都会收到OCS创建成功的通知,里面会包括OCS的实例ID和初始密码(关于密码的用处后面会讲到)。我们现在登录OCS控制台, http://ocs.console.aliyun.com/ 就可以看到已经购买到的OCS实例列表。在列表页面上对应OCS实例的后面点击“管理”,就可以进入该OCS实例的详情页,看到更多的详细信息。 ------------------------- 我们现在已经有了一个OCS缓存实例,现在是时候试玩OCS了。要使用OCS就要写一点程序代码,不过不用担心,我们在这里采用“Happy-Path”的方法,从最简单的操作开始,让新上手的菜鸟们能马上就有一个能调用OCS缓存服务的程序。OCS提供缓存服务,它并不要求我们的程序是哪种语言来写的。我们这里先以Java程序为例,写一个最简单的“Hello World”。(其他编程语言的例子,我们随后附上。)第一步,登录你的阿里云ECS服务器,在上面安装Java JDK和你常用的IDE(比如Eclipse)。一定要记得我们之前说过的,只有在阿里云内网的ECS服务器上,才能访问我们的OCS实例。所以,用家里或是公司的电脑执行下面的代码示例是看不到结果的。 Java JDK和Eclipse都很容易从网上找到下载,比如 http://download.eclipse.org/ 或者 http://www.onlinedown.net/soft/32289.htm 第二步,在把Java开发环境准备好了之后,下载第一个代码示例(Sample-Code-1第三步,在Eclipse里面打开刚下载的OcsSample1.java,我们要根据自己的OCS实例信息修改几个地方。        我们每个人买到的OCS实例的ID都是不重复的,其对应的阿里云内网地址也是独一无二的,这些信息都在OCS控制台上显示出来。我们在同自己的OCS实例建立连接的时候,需要根据这些信息修改OcsSample1.java中的对应地方。         public static void main(String[] args) {                                        final String host = "b2fd2f89f49f11e3.m.cnqdalicm9pub001.ocs.aliyuncs.com"; //控制台上的“内网地址”                   final String port ="11211";       //默认端口 11211,不用改                   final String username = "b2fd2f89f49f11e3"; //控制台上的“访问账号”                   final String password = "my_password"; //邮件或短信中提供的“密码”                   …… …… ……       信息修改完毕,我们可以运行自己的程序了。运行main函数,我们会在Eclipse下面的console窗口看到下面这样的结果(请忽略可能出现的红色INFO调试信息): OCS Sample CodeSet操作完成!Get操作: Open Cache Service,  from www.Aliyun.com     OK,搞定!我们已经成功的连接上了阿里云的OCS并且调用缓存服务成功,就这么简单。-------------------------我们已经成功运行了第一个调用阿里云OCS缓存服务的Sample程序OcsSample1.java,现在我们看看这个程序里都做了什么。                                  …… …… ……                            System.out.println("OCS Sample Code");                                                        //向OCS中存一个key为"ocs"的数据,便于后面验证读取数据,                             //这个数据对应的value是字符串 Open Cache Service,  from www.Aliyun.com                            OperationFuture future = cache.set("ocs", 1000," Open Cache Service,  from www.Aliyun.com");                            //向OCS中存若干个数据,随后可以在OCS控制台监控上看到统计信息                            for(int i=0;i<100;i++){                                String key="key-"+i;                                String value="value-"+i;                                 //执行set操作,向缓存中存数据                                cache.set(key, 1000, value);                            }                             System.out.println("Set操作完成!");                             future.get();  //  确保之前(cache.set())操作已经结束                         //执行get操作,从缓存中读数据,读取key为"ocs"的数据                            System.out.println("Get操作:"+cache.get("ocs"));                            …… …… …… 从这些代码中可以看出: 1. 我们在建立与OCS缓存服务器的连接后,先是向缓存中存(set)了一个“key-value”(键值对)形式的数据,这个数据的key是字符串“ocs”,其对应的value也是字符串;2. 接着我们继续向缓存中存(set)了100个其他简单的“key-value”数据。3. 最后我们进行功能验证。根据之前给定的key,从缓存中获取(get)其对应的value:也就是输入字符串“ocs”,缓存给我们返回value对应的字符串。 以上的步骤中,1与3是相对应的,我们只有先向缓存中set了某个数据,后面才能从缓存中get到这个数据。步骤2中程序向缓存set了100个数据,是为了从另一个方面进行验证。我们回到阿里云OCS控制台,打开“实例详情”页,在“实例监控”的部分点击刷新,会看到其中一些监控项的值已经发生了变化(注:监控信息的刷新可能存在数秒的延迟), 其中的“Key的个数”已经变成了101,也就是说我们程序已经成功地向OCS缓存中存放了101个数据。-------------------------在写下一篇技术贴之前,列一些OCS用户在入门时问到的问题,方便其他刚认识OCS的同学:Question:买了1G的OCS,那就相当于这个1G是专门缓存用的,与ECS服务器的内存没关系是吧~Answer:是的,OCS的缓存容量与您ECS的内存容量是没关系的。Question:OCS 外网测试,怎么连接?有没有外网连接地址哦?Answer:OCS是不能从外网访问的。参照上面的文章。Question:我之前那个OCS可以正常使用,但现在换了一个OCS就不行了,怎么回事?Answer:经核实您的主机是属于杭州节点的,而现在这个OCS是青岛节点的,不同地域之间的产品内网不互通。Question:在设置一个value时,如果指定过期时间为0,会永久保留吗?Answer:指定过期时间为0,OCS就认为此数据不根据过期时间发生淘汰;但是,此数据仍有可能基于LRU被其他数据淘汰,或者由内存清理造成丢失 ,因此不能认为这个value会永久保留。 Question:对OCS的访问是否需要负载均衡? Answer:不需要。对访问请求的负载均衡都是在OCS服务器端来进行的,用户直接使用缓存服务即可,不用考虑负载均衡的事情。 Question:OCS是否会主动关闭闲置的连接? 如果会,请问连接闲置多久会被关闭?Answer:OCS不会主动关闭闲置的用户连接。但是用户的环境如果使用了SLB,则需要参考SLB连接关闭时间。Question:如何设置数据在OCS缓存中的过期时间 ?Answer:关于设置缓存数据的过期时间,可以参考Memcached官方说明: https://code.google.com/p/memcached/wiki/NewCommands An expiration time, in seconds. Can be up to 30 days. After 30 days, is treated as a unix timestamp of an exact date. 翻译过来就是:0~2592000表示从当前时刻算起的时间长度(以秒计算,最长2592000即30天);大于2592000表示UNIX时间戳。 此值设置为0表明此数据不会主动过期。------------------------- 回 12楼(村里一把手) 的帖子 谢谢,要让大家用得好才算数。 -------------------------缓存与数据库相结合使用,是常见的一种应用搭配场景。现在我们再看一个例子,是用OCS搭配MySQL数据库使用。Java示例代码在此(这个示例代码中,大部分与前几个例子类似。因为要与数据库结合,所以程序需要依赖一个JDBC的jar包才能运行。支持MySQL的JDBC jar包在此(在程序中添加MySQL数据库的连接信息:     …… …… ……            // JDBC driver name and database URL    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";    static final String DB_URL = "jdbc:mysql://xxxxxxx.mysql.rds.aliyuncs.com/testdb"; //MySQL数据库URL        //  Database用户名及密码    static final String DB_USER = "xxxxxx";    static final String DB_PASS = "xxxxxx";            我们设想这样一个场景:我们需要从数据库的tableone表中查找区域不属于北京的记录总数,用SQL表示就是:SELECT count(*)  FROM testdb.tableone where region != 'beijing'假定这个表中的数据如下,则这条SQL查询返回的结果就是7:如果这个查询被调用到的频率很高,多个用户反复不断的在数据库中查这个数据,我们就可以把这个查询结果放到OCS缓存中去。看下面的代码片段,我们用for循环模拟用户连续20次在数据库中查询上述SQL语句:              for (int i = 1; i <= 20; i++) {                String sql = "SELECT count(*)  FROM testdb.tableone where region != 'beijing'";                String key ="non-beijing"; //给SQL语句自定义一个key                //在OCS缓存里按key查找               String value =  (String) cache.get(key);                                if (value == null) {                    // 在OCS缓存里没有命中                    // step 1:从My SQL数据库中查询                    //Load MySQL Driver                      Class.forName(JDBC_DRIVER);                     con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);                    ps = con.prepareStatement(sql);                    ResultSet result = ps.executeQuery(sql);                    result.next();                                        value=result.getString(1);                    System.out.println("从MySQL中查询数据.  Key= "+key+" Value="+value);                                       // step 2: 把数据库返回的数据作为value存放到OCS缓存中去                    cache.set(key, EXPIRE_TIME, value);                                    } else {                    // 在OCS缓存里命中                    System.out.println("从OCS中读取数据.     Key= "+key+" Value="+value);                }                            }// end of for在这段代码中我们可以看到,我们给这条SQL语句标记了一个key,当有用户要执行这条SQL的时候,我们首先按照key在OCS缓存中查找:如果没有对应的缓存数据,则连接MySQL数据库执行SQL查询,把结果返回给用户,并把这个查询结果存到OCS缓存中去;如果OCS中已经有了对应的缓存数据,则直接把缓存数据返回给用户。运行结果如下: 从MySQL中查询数据.  Key= non-beijing, Value=7从OCS中读取数据.     Key= non-beijing, Value=7从OCS中读取数据.     Key= non-beijing, Value=7从OCS中读取数据.     Key= non-beijing, Value=7…… …… 从结果可以看出,程序第1次是从MySQL数据库当中查询数据,后面的19次都是从OCS缓存中获取key对应的value直接返回。也就是说,OCS降低了程序去连接MySQL数据库执行SQL查询的次数,减轻了对数据库的负载压力。用户对热点数据访问的频率越高,OCS的这种优势就越明显。

唐翰 2019-12-01 23:41:23 0 浏览量 回答数 0

回答

Python 的 Decorator在使用上和Java/C#的Annotation很相似,就是在方法名前面加一个@XXX注解来为这个方法装饰一些东西。但是,Java/C#的Annotation也很让人望而却步,太TMD的复杂了,你要玩它,你需要了解一堆Annotation的类库文档,让人感觉就是在学另外一门语言。 而Python使用了一种相对于Decorator Pattern和Annotation来说非常优雅的方法,这种方法不需要你去掌握什么复杂的OO模型或是Annotation的各种类库规定,完全就是语言层面的玩法:一种函数式编程的技巧。如果你看过本站的《函数式编程》,你一定会为函数式编程的那种“描述你想干什么,而不是描述你要怎么去实现”的编程方式感到畅快。(如果你不了解函数式编程,那在读本文之前,还请你移步去看看《函数式编程》) 好了,我们先来点感性认识,看一个Python修饰器的Hello World的代码。 Hello World 下面是代码:文件名:hello.py def hello(fn): def wrapper(): print "hello, %s" % fn.__name__ fn() print "goodby, %s" % fn.__name__ return wrapper @hellodef foo(): print "i am foo" foo() 当你运行代码,你会看到如下输出: [chenaho@chenhao-air]$ python hello.pyhello, fooi am foogoodby, foo 你可以看到如下的东西: 1)函数foo前面有个@hello的“注解”,hello就是我们前面定义的函数hello 2)在hello函数中,其需要一个fn的参数(这就用来做回调的函数) 3)hello函数中返回了一个inner函数wrapper,这个wrapper函数回调了传进来的fn,并在回调前后加了两条语句。 Decorator 的本质 对于Python的这个@注解语法糖- Syntactic Sugar 来说,当你在用某个@decorator来修饰某个函数func时,如下所示: @decoratordef func(): pass 其解释器会解释成下面这样的语句: func = decorator(func) 尼玛,这不就是把一个函数当参数传到另一个函数中,然后再回调吗?是的,但是,我们需要注意,那里还有一个赋值语句,把decorator这个函数的返回值赋值回了原来的func。 根据《函数式编程》中的first class functions中的定义的,你可以把函数当成变量来使用,所以,decorator必需得返回了一个函数出来给func,这就是所谓的higher order function 高阶函数,不然,后面当func()调用的时候就会出错。 就我们上面那个hello.py里的例子来说, @hellodef foo(): print "i am foo" 被解释成了: foo = hello(foo) 是的,这是一条语句,而且还被执行了。你如果不信的话,你可以写这样的程序来试试看: def fuck(fn): print "fuck %s!" % fn.__name__[::-1].upper() @fuckdef wfg(): pass 没了,就上面这段代码,没有调用wfg()的语句,你会发现, fuck函数被调用了,而且还很NB地输出了我们每个人的心声! 再回到我们hello.py的那个例子,我们可以看到,hello(foo)返回了wrapper()函数,所以,foo其实变成了wrapper的一个变量,而后面的foo()执行其实变成了wrapper()。 知道这点本质,当你看到有多个decorator或是带参数的decorator,你也就不会害怕了。 比如:多个decorator @decorator_one@decorator_twodef func(): pass 相当于: func = decorator_one(decorator_two(func)) 比如:带参数的decorator: @decorator(arg1, arg2)def func(): pass 相当于: func = decorator(arg1,arg2)(func) 这意味着decorator(arg1, arg2)这个函数需要返回一个“真正的decorator”。 带参数及多个Decrorator 我们来看一个有点意义的例子:html.py def makeHtmlTag(tag, args, *kwds): def real_decorator(fn): css_class = " class='{0}'".format(kwds["css_class"]) if "css_class" in kwds else "" def wrapped(*args, **kwds): return "<"+tag+css_class+">" + fn(*args, **kwds) + "</"+tag+">" return wrapped return real_decorator @makeHtmlTag(tag="b", css_class="bold_css")@makeHtmlTag(tag="i", css_class="italic_css")def hello(): return "hello world" print hello() 输出: hello world 在上面这个例子中,我们可以看到:makeHtmlTag有两个参数。所以,为了让 hello = makeHtmlTag(arg1, arg2)(hello) 成功,makeHtmlTag 必需返回一个decorator(这就是为什么我们在makeHtmlTag中加入了real_decorator()的原因),这样一来,我们就可以进入到 decorator 的逻辑中去了—— decorator得返回一个wrapper,wrapper里回调hello。看似那个makeHtmlTag() 写得层层叠叠,但是,已经了解了本质的我们觉得写得很自然。 你看,Python的Decorator就是这么简单,没有什么复杂的东西,你也不需要了解过多的东西,使用起来就是那么自然、体贴、干爽、透气,独有的速效凹道和完美的吸收轨迹,让你再也不用为每个月的那几天感到焦虑和不安,再加上贴心的护翼设计,量多也不用当心。对不起,我调皮了。 什么,你觉得上面那个带参数的Decorator的函数嵌套太多了,你受不了。好吧,没事,我们看看下面的方法。 class式的 Decorator 首先,先得说一下,decorator的class方式,还是看个示例: class myDecorator(object): def __init__(self, fn): print "inside myDecorator.__init__()" self.fn = fn def __call__(self): self.fn() print "inside myDecorator.__call__()" @myDecoratordef aFunction(): print "inside aFunction()" print "Finished decorating aFunction()" aFunction() 输出: inside myDecorator.__init__() Finished decorating aFunction() inside aFunction() inside myDecorator.__call__() 上面这个示例展示了,用类的方式声明一个decorator。我们可以看到这个类中有两个成员:1)一个是__init__(),这个方法是在我们给某个函数decorator时被调用,所以,需要有一个fn的参数,也就是被decorator的函数。2)一个是__call__(),这个方法是在我们调用被decorator函数时被调用的。上面输出可以看到整个程序的执行顺序。 这看上去要比“函数式”的方式更易读一些。 下面,我们来看看用类的方式来重写上面的html.py的代码:html.py class makeHtmlTagClass(object): def __init__(self, tag, css_class=""): self._tag = tag self._css_class = " class='{0}'".format(css_class) if css_class !="" else "" def __call__(self, fn): def wrapped(*args, **kwargs): return "<" + self._tag + self._css_class+">" + fn(*args, **kwargs) + "</" + self._tag + ">" return wrapped @makeHtmlTagClass(tag="b", css_class="bold_css")@makeHtmlTagClass(tag="i", css_class="italic_css")def hello(name): return "Hello, {}".format(name) print hello("Hao Chen") 上面这段代码中,我们需要注意这几点:1)如果decorator有参数的话,__init__() 成员就不能传入fn了,而fn是在__call__的时候传入的。2)这段代码还展示了 wrapped(args, *kwargs) 这种方式来传递被decorator函数的参数。(其中:args是一个参数列表,kwargs是参数dict,具体的细节,请参考Python的文档或是StackOverflow的这个问题,这里就不展开了) 用Decorator设置函数的调用参数 你有三种方法可以干这个事: 第一种,通过 **kwargs,这种方法decorator会在kwargs中注入参数。 def decorate_A(function): def wrap_function(*args, **kwargs): kwargs['str'] = 'Hello!' return function(*args, **kwargs) return wrap_function @decorate_Adef print_message_A(args, *kwargs): print(kwargs['str']) print_message_A() 第二种,约定好参数,直接修改参数 def decorate_B(function): def wrap_function(*args, **kwargs): str = 'Hello!' return function(str, *args, **kwargs) return wrap_function @decorate_Bdef print_message_B(str, args, *kwargs): print(str) print_message_B() 第三种,通过 *args 注入 def decorate_C(function): def wrap_function(*args, **kwargs): str = 'Hello!' #args.insert(1, str) args = args +(str,) return function(*args, **kwargs) return wrap_function class Printer: @decorate_C def print_message(self, str, *args, **kwargs): print(str) p = Printer()p.print_message() Decorator的副作用 到这里,我相信你应该了解了整个Python的decorator的原理了。 相信你也会发现,被decorator的函数其实已经是另外一个函数了,对于最前面那个hello.py的例子来说,如果你查询一下foo.__name__的话,你会发现其输出的是“wrapper”,而不是我们期望的“foo”,这会给我们的程序埋一些坑。所以,Python的functool包中提供了一个叫wrap的decorator来消除这样的副作用。下面是我们新版本的hello.py。文件名:hello.py from functools import wrapsdef hello(fn): @wraps(fn) def wrapper(): print "hello, %s" % fn.__name__ fn() print "goodby, %s" % fn.__name__ return wrapper @hellodef foo(): '''foo help doc''' print "i am foo" pass foo()print foo.__name__ #输出 fooprint foo.__doc__ #输出 foo help doc 当然,即使是你用了functools的wraps,也不能完全消除这样的副作用。 来看下面这个示例: from inspect import getmembers, getargspecfrom functools import wraps def wraps_decorator(f): @wraps(f) def wraps_wrapper(*args, **kwargs): return f(*args, **kwargs) return wraps_wrapper class SomeClass(object): @wraps_decorator def method(self, x, y): pass obj = SomeClass()for name, func in getmembers(obj, predicate=inspect.ismethod): print "Member Name: %s" % name print "Func Name: %s" % func.func_name print "Args: %s" % getargspec(func)[0] 输出: Member Name: method Func Name: method Args: [] 你会发现,即使是你你用了functools的wraps,你在用getargspec时,参数也不见了。 要修正这一问,我们还得用Python的反射来解决,下面是相关的代码: def get_true_argspec(method): argspec = inspect.getargspec(method) args = argspec[0] if args and args[0] == 'self': return argspec if hasattr(method, '__func__'): method = method.__func__ if not hasattr(method, 'func_closure') or method.func_closure is None: raise Exception("No closure for method.") method = method.func_closure[0].cell_contents return get_true_argspec(method) 当然,我相信大多数人的程序都不会去getargspec。所以,用functools的wraps应该够用了。 一些decorator的示例 好了,现在我们来看一下各种decorator的例子: 给函数调用做缓存 这个例实在是太经典了,整个网上都用这个例子做decorator的经典范例,因为太经典了,所以,我这篇文章也不能免俗。 from functools import wrapsdef memo(fn): cache = {} miss = object() @wraps(fn) def wrapper(*args): result = cache.get(args, miss) if result is miss: result = fn(*args) cache[args] = result return result return wrapper @memodef fib(n): if n < 2: return n return fib(n - 1) + fib(n - 2) 上面这个例子中,是一个斐波拉契数例的递归算法。我们知道,这个递归是相当没有效率的,因为会重复调用。比如:我们要计算fib(5),于是其分解成fib(4) + fib(3),而fib(4)分解成fib(3)+fib(2),fib(3)又分解成fib(2)+fib(1)…… 你可看到,基本上来说,fib(3), fib(2), fib(1)在整个递归过程中被调用了两次。 而我们用decorator,在调用函数前查询一下缓存,如果没有才调用了,有了就从缓存中返回值。一下子,这个递归从二叉树式的递归成了线性的递归。 Profiler的例子 这个例子没什么高深的,就是实用一些。 import cProfile, pstats, StringIO def profiler(func): def wrapper(*args, **kwargs): datafn = func.__name__ + ".profile" # Name the data file prof = cProfile.Profile() retval = prof.runcall(func, *args, **kwargs) #prof.dump_stats(datafn) s = StringIO.StringIO() sortby = 'cumulative' ps = pstats.Stats(prof, stream=s).sort_stats(sortby) ps.print_stats() print s.getvalue() return retval return wrapper 注册回调函数 下面这个示例展示了通过URL的路由来调用相关注册的函数示例: class MyApp(): def __init__(self): self.func_map = {} def register(self, name): def func_wrapper(func): self.func_map[name] = func return func return func_wrapper def call_method(self, name=None): func = self.func_map.get(name, None) if func is None: raise Exception("No function registered against - " + str(name)) return func() app = MyApp() @app.register('/')def main_page_func(): return "This is the main page." @app.register('/next_page')def next_page_func(): return "This is the next page." print app.call_method('/')print app.call_method('/next_page') 注意:1)上面这个示例中,用类的实例来做decorator。2)decorator类中没有__call__(),但是wrapper返回了原函数。所以,原函数没有发生任何变化。 给函数打日志 下面这个示例演示了一个logger的decorator,这个decorator输出了函数名,参数,返回值,和运行时间。 from functools import wrapsdef logger(fn): @wraps(fn) def wrapper(*args, **kwargs): ts = time.time() result = fn(*args, **kwargs) te = time.time() print "function = {0}".format(fn.__name__) print " arguments = {0} {1}".format(args, kwargs) print " return = {0}".format(result) print " time = %.6f sec" % (te-ts) return result return wrapper @loggerdef multipy(x, y): return x * y @loggerdef sum_num(n): s = 0 for i in xrange(n+1): s += i return s print multipy(2, 10)print sum_num(100)print sum_num(10000000) 上面那个打日志还是有点粗糙,让我们看一个更好一点的(带log level参数的): import inspectdef get_line_number(): return inspect.currentframe().f_back.f_back.f_lineno def logger(loglevel): def log_decorator(fn): @wraps(fn) def wrapper(*args, **kwargs): ts = time.time() result = fn(*args, **kwargs) te = time.time() print "function = " + fn.__name__, print " arguments = {0} {1}".format(args, kwargs) print " return = {0}".format(result) print " time = %.6f sec" % (te-ts) if (loglevel == 'debug'): print " called_from_line : " + str(get_line_number()) return result return wrapper return log_decorator 但是,上面这个带log level参数的有两具不好的地方,1) loglevel不是debug的时候,还是要计算函数调用的时间。2) 不同level的要写在一起,不易读。 我们再接着改进: import inspect def advance_logger(loglevel): def get_line_number(): return inspect.currentframe().f_back.f_back.f_lineno def _basic_log(fn, result, *args, **kwargs): print "function = " + fn.__name__, print " arguments = {0} {1}".format(args, kwargs) print " return = {0}".format(result) def info_log_decorator(fn): @wraps(fn) def wrapper(*args, **kwargs): result = fn(*args, **kwargs) _basic_log(fn, result, args, kwargs) return wrapper def debug_log_decorator(fn): @wraps(fn) def wrapper(*args, **kwargs): ts = time.time() result = fn(*args, **kwargs) te = time.time() _basic_log(fn, result, args, kwargs) print " time = %.6f sec" % (te-ts) print " called_from_line : " + str(get_line_number()) return wrapper if loglevel is "debug": return debug_log_decorator else: return info_log_decorator 你可以看到两点,1)我们分了两个log level,一个是info的,一个是debug的,然后我们在外尾根据不同的参数返回不同的decorator。2)我们把info和debug中的相同的代码抽到了一个叫_basic_log的函数里,DRY原则。 一个MySQL的Decorator 下面这个decorator是我在工作中用到的代码,我简化了一下,把DB连接池的代码去掉了,这样能简单点,方便阅读。 import umysqlfrom functools import wraps class Configuraion: def __init__(self, env): if env == "Prod": self.host = "coolshell.cn" self.port = 3306 self.db = "coolshell" self.user = "coolshell" self.passwd = "fuckgfw" elif env == "Test": self.host = 'localhost' self.port = 3300 self.user = 'coolshell' self.db = 'coolshell' self.passwd = 'fuckgfw' def mysql(sql): _conf = Configuraion(env="Prod") def on_sql_error(err): print err sys.exit(-1) def handle_sql_result(rs): if rs.rows > 0: fieldnames = [f[0] for f in rs.fields] return [dict(zip(fieldnames, r)) for r in rs.rows] else: return [] def decorator(fn): @wraps(fn) def wrapper(*args, **kwargs): mysqlconn = umysql.Connection() mysqlconn.settimeout(5) mysqlconn.connect(_conf.host, _conf.port, _conf.user, _conf.passwd, _conf.db, True, 'utf8') try: rs = mysqlconn.query(sql, {}) except umysql.Error as e: on_sql_error(e) data = handle_sql_result(rs) kwargs["data"] = data result = fn(*args, **kwargs) mysqlconn.close() return result return wrapper return decorator @mysql(sql = "select * from coolshell" )def get_coolshell(data): ... ... ... .. 线程异步 下面量个非常简单的异步执行的decorator,注意,异步处理并不简单,下面只是一个示例。 from threading import Threadfrom functools import wraps def async(func): @wraps(func) def async_func(*args, **kwargs): func_hl = Thread(target = func, args = args, kwargs = kwargs) func_hl.start() return func_hl return async_func if name == '__main__': from time import sleep @async def print_somedata(): print 'starting print_somedata' sleep(2) print 'print_somedata: 2 sec passed' sleep(2) print 'print_somedata: 2 sec passed' sleep(2) print 'finished print_somedata' def main(): print_somedata() print 'back in main' print_somedata() print 'back in main' main() 其它 关于更多的示例,你可以参看: Python Decorator Library来源:网络

51干警网 2019-12-02 01:10:47 0 浏览量 回答数 0

问题

干货分享:DBA专家门诊一期:索引与sql优化问题汇总

xiaofanqie 2019-12-01 21:24:21 74007 浏览量 回答数 38

回答

【徐寅-南京大学- 阿里实习心得】 现在的心情非常复杂,因为小姐姐说看中了我的研究成果才让我参加这个实习心得分享的,但是我环顾四周只有我一个人的成果还没有发表出来!有一种青铜误入王者局的错乱感,不过在小姐姐大大的“不准退出”四个字面前,还得强撑着分享一点我的搬砖经历。 技术落地 来到菜鸟实习给了我在学校科研完全不一样的体验。这点感觉大家应该都深有体会。在学校是设计一个漂亮的齿轮,而在公司需要把这个齿轮安装到巨大的机器上,还要保证能够正常运行。结果就是来了菜鸟以后我花了很多时间在算法无关的事情上,比如说上线代码的编写和调试,比如说符合rtp接口的模型的训练和装载,比如和仓库运维人员的沟(扯)通(皮),争取更多的流量给我们的算法测试等等。在仓库这种大规模的现实复杂环境进行落地,为了数据的准确,只有到仓库实地考察测算以后你才能安下心来。 快乐工作 在我来阿里之前,关于阿里只听过马老师的“福报论”,因此以为可能会是一个从黑夜干到黑夜的血汗工厂。不过没想到实际上是10-6-5的八小时工作制,马老师的“福报论”只是鼓励大家要多奋斗而已。虽然大家都习惯了自愿加班到9点,不过有学长借的工牌,能够每天吃20块的夜宵。不过要是夜宵的种类能更丰富一点就好了,那种精致的小蛋糕总是可遇不可求。 回想一下,在杭州已经去过不少次西湖了,不过都是团建的活动。菜鸟ai部的团建应该是我最喜欢的团建类型了。在西湖的茶园美景边上,享受着清风和茶香,大家悠闲地玩着桌游或者聊天,让我这个ktv残疾人终于享受到了团建的快乐。 希望成果没事 半年多的实习一共攒出来两个工作,一个是偏理论的强化学习多目标环境自动分解技术,另一个是强化学习应用在仓库进行拣选单全局优化的工作,目前即将投稿Neurips20和NMI,希望能有一个好结果吧! 【杨亚涛-中山大学- 我的RI实习经历和感受】 现在回想还能非常清晰的记得当初实习第一天的那个场景,经过一系列入职流程之后,在杭州那高温的鬼天气下,我和师兄搬着台式机从四号楼走到了七号楼。由于我属于那种营养过剩的体型,机器搬到七号楼时,我的整个上衣都感觉被汗打湿了。进入大厅中,好不容易从被高温天气折磨的懵逼的状态下解脱出来。我又进入到了一个新的懵逼阶段。师兄带着我掠过了无数个工位之后转身进入了最角落的一个小房间。嗯,没错,我在实习的第一天就被拉进阿里特色的双十一项目室了。环顾着周围的大佬,心中还是有些胆怯。懵逼的在各位大佬面前做完自我介绍。 之后,在师兄的帮助下装完各种实验环境。师兄带着我到了走廊并在玻璃上描绘着大家做的事情以及我要做的事情。呃。。。懵逼过后的我开始接触了一个全新的令我再次懵逼的研究内容-Query改写。简单来说就是淘宝的用户常常输入的Query和商品标题描述之间会存在GAP。如何消除这个GAP是需要Query改写来做的。举个例子,用户搜索“大容量冰箱”,很多相关的商品标题不会用“大容量”来描述。会用多少升来写。单用用户输入的Query进行商品召回,会有很多相关产品会被忽略,并且还有可能面临不相关产品被召回展示。为了增加相关商品召回以及准确度,就需要对用户输入的原始Query进行改写。呃。。。听完师兄的介绍之后,师兄说希望能在双十一检验下效果。那个时候的感觉就是,哪有时间懵逼啊,抓紧做吧。 接下来,每天就在师兄发资料、阅读资料、实验、分析数据中度过。实验结果逐渐从坏变成了好。不过最后还是很遗憾没有在双十一时候检测模型效果。不过,在双十一之后师兄上线测试效果。还是有明显的改进的。在看到师兄周报中线上指标的提升之后,我的内心不由的升起了些许成就感。之后就开始了写论文投论文。经过一轮SIGIR的Reject之后,该工作被CIKM接收。总体谈下实习的感受。在来到阿里做RI实习之前,在实验室都是做一些偏向于研究性质的工作。呃。。。简单来说就是做了很多脱离应用场景的的工作。就是为了发论文而发论文。在阿里做的都是实用的、能够迅速看到实际效果的工作。既能够发论文,自己每次打开淘宝搜索时又能获得满满的成就感。 【张心怡-北京大学- 在阿里数据库科研团队实习是种怎样的体验?】 作者简介: 张心怡,北京大学前沿交叉研究院研究生,中国人民大学信息学院本科生。从18年底开始在POLARDB-X团队智能数据库组的实习,现已在阿里度过了一年多的时光。 心怡说,对于有志于数据库领域研究的小伙伴,这里是最好的学习和工作平台。 优秀的同行人,助我成长 我所在组的研究方向是智能数据库,目标是利用机器学习和统计优化等技术,实现数据库系统各个组件的自动优化,如存储引擎,并发控制,SQL优化器等,以减少系统成本,提升系统性能,以实现一个self-driving的数据库系统。 这是一个很有前景的方向。大四上学期,初来实习的我内心其实颇为忐忑,面对组里的同事前辈,“跟不上进度”成了我最担心的事情。然而,进入到工作状态之后,我心里的石头落了地:mentor给实习生安排的任务是循序渐进的,一次次讨论与指导,使我能够快速上手。经过和mentor的讨论,我选择把“智能查询优化”作为第一个研究项目,并且与大四学期的毕设结合,基于阿里线上平台的实际问题,展开研究。查询优化属于数据库比较底层的部分,之前我没有很深的了解。在开展研究的过程中,除了自己阅读文献,同事成为了我的“知识宝库”。遇到场景落地问题时,我会请教PolarDB-X优化器开发的同事,他们往往能够一针见血地指出实际问题。 我的成长离不开组里各位老师的帮助与分享,组内还会定期或不定期组织reading group,讲解工作成果与学界进展。在这里,你会发现身边的同事大多对深耕于某一领域,实力扎实,与他们交流会收获很多! 快乐工作,认真生活 “快乐工作,认真生活”,记得我刚刚入职时HR提到了这个观点,入职之后我发现这是阿里人身体力行的一句话。 在工作上,身边的人都很努力。在这种氛围的感召下,遇到难题,我也会情不自禁地在工位上多坐一会。暑期实习的时候,时常9点之后结束工作,打车回宿舍。生活上,团队里组织了丰富多彩的活动。聚餐已经成为了常规项目。工作间隙还可以去健身房锻炼一波,园区的按摩椅也成为了养生女孩的午休项目。印象最深的是团队组织的运动会,女子项目是平板支撑。听到这个消息之后,我基本每天都进行练习。运动会那天,杭州base、北京base、硅谷base进行了三地PK,在同事的加油下,我坚持了平板支持7分25秒,最后拿到了女子组冠军。 大家的工作与生活模式都很健康充实。在阿里,我见识到了工作发展的可持续性与优秀的团队交互模式。 阿里实习,带我打开科研大门 来到阿里之前,我是一个对科研比较懵懂的门外汉。特别幸运的是,在这里我遇到了很棒的mentor们指导我进行研究工作。不论是基础的代码风格还是研究思路、遇到的问题,mentor都会事无巨细地进行引导。以前我写代码,能跑起来、自己看得懂就行。 我在阿里提交的第一次merge request,有不少随意的空行和一些tricky且难以维护的逻辑。印象很深的是,当时mentor逐行写了comment指出问题。我认识到了代码的规范性和可维护性,以及别人是否能够理解自己的代码都是要考虑的问题。 2019年我从中国人民大学毕业,来到北京大学攻读数据科学研究生,感谢我的研究生导师崔斌老师对我在阿里实习的支持。当时,我在阿里研究的第一个课题,也画上了圆满的句号:我在NDBC(CCF National Database Conference)进行了课题报告,投稿论文并被评为best student paper。 我在阿里参与研究的第二个课题是数据库的智能调参。传统的数据库调参中DBA基于经验与尝试推荐参数值,而我们要做的是基于机器学习算法自动高效给出推荐。这个课题在进行过程中遇到了不少困难,算法的适用性与有效性是我们重点考虑的。在进行了很久的实验之后,会发现一些坑和问题,挫败感是有的,但是会马上被新的尝试与期待替代。 我发现,在这里的研究并不是为了学术灌水而做,有意义研究是问题导向的。mentor时常强调要找到可复现的场景和实际问题,这样才有实际意义。我的mentor base在硅谷,因为时差我时不时在早上收到消息和反馈,这成为了我起床开启新的一天的最大动力。mentor是我科研路上的引路人,也是并肩作战的战友,大家一起为了攻克问题而努力! 阿里的实习经历,帮我找到了打开科研大门的钥匙,让我从对科研的懵懵懂懂,到爱上了这一发现问题、攻克问题的过程。我希望将来能继续数据库领域的研究工作,在玉洁冰清的逻辑世界继续追寻。 【张亚斌-华南理工大学- 搬砖有感之研究吐槽】 首先声明这是一份任务性报告,大家如果赶去吃饭就可以先撤了。大家如果正在排队,可以一起吐槽一下。 作为一名即将硕士毕业&博士入学的研究生,我的研究经验有限,所以以下感悟吐槽仅供大家茶余饭后一笑,偶有雷同,纯属巧合~ 选题 提到学术研究,首当其冲的就是选题啦。选题并不仅仅是选择自己喜欢的热点题目,要综合考虑很多其他因素: - Supervisor or coauthor的研究背景。该项涉及到可预期的帮助 - 可使用的硬件资源。对于cv和ml来说,有的课题需要占用很大的计算资源,如 - -ImageNet based NAS。硬件资源基本决定了试错的时间成本。 - 研究课题的研究价值。当时火的课题,有些做1-2年之后可能就过时了,有些1-2年之后可能更加火。决定性因素很大程度是其潜在应用空间。 该研究课题在工业界的价值。在阿里工作实习的我们的研究课题当然和公司项目有千丝万缕的联系。 自己的兴趣。 除了上述的热点课题或潜在热点课题,还有如下的选择: 自创新的课题,俗称挖坑。该方面需要对整个研究领域比较全面和比较深入的理解,然后对整个研究领域的研究方向进行建设性的预测。一般都是大佬在挖坑。 方法 选好课题之后,得到对应的解决问题的方法一般经由如下步骤: 1. 发现问题的能力:一般来说,对于新问题会有一个或几个直接的处理方法,此时就是比手速的时候了;不过很多时候这里真正较量的是发现问题的能力。 2.发现问题的能力again:后续像我这样的大多数研究人员都是在该框架上修修改改,当然也会有大牛直接开辟新的basic pipelines。如果我们聚焦在对现有框架的修改,首先第一步要做的是分析现有框架有什么遗留问题,然后针对该问题设计改进方法。 3.Naïve idea:我们一般会发现其实做出少量改进并发表论文是相对容易的,因为simple idea是比较容易获得的:如 https://mp.weixin.qq.com/s/vnyra_xcg9D6NUNVpKtP0Q所调侃,单纯的做方法A+方法B,或者A方法用于B领域就可以实现(或许这就是多看论文的巨大优势?调侃脸)。不过对于非入门同学来说,该method combine的方式形同饮鸩止渴。 4.Mature idea:相对于直接将其他论文中的方法“借”为己用,借鉴其他论文方法提出过程中的研究思路是一个更加合理的选择。也就是要分析出:该作者发现了哪些问题?对该问题提出了怎样的思考?如何从思考过渡到实际算法改进?甚至对于算法改进过程中碰到的问题的处理方法。这个分析过程是重要的也是必要的,我觉得这个过程是研究人员提升的过程,即发现问题,解决问题能力的全面提升。 5.Advanced idea: 特指原创性很强的,从无到有的idea。和上面说的大牛的basic pipelines应该基本重叠吧。 写作 基本方法验证之后,接下来论文写作了。 英文写作约等于逻辑+英文本身,其中逻辑占绝大比重。逻辑就是讲故事,如何条理分明将自己的工作讲给别人听,并让听者觉得该工作在整个研究的领域是重要的,有意义的。写作能力很重要,例如即使naive的idea 如果写作很好也是很有机会发表的。那么如何练习呢?我导师给的朴素建议是:多练习,每天把自己的工作进展和想法用英文formal 的写出来。 最后,也是最重要的,祝各位同学抱紧大腿,大腿紧抱。

问问小秘 2020-05-19 13:01:37 0 浏览量 回答数 0

问题

深入理解Magento – 第六章 – 高级Magento模型 :报错

kun坤 2020-06-14 15:19:25 0 浏览量 回答数 1

问题

深入理解Magento – 第六章 – 高级Magento模型:配置报错 

kun坤 2020-06-02 14:47:07 2 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站