一切福田,不離方寸,從心而覓,感無不通。

mysql游标循环的使用

这里有一个比较坑的地方,注意,变量的定义不要和你的select的列的键同名!不然,fetch into 会失败! 另外 : 如果没有则插入数据,如果有则更新的方法: insert into test values (a,b) ON DUPLICATE KEY UPDATE a=c;   from:https://www.cnblogs.com/trying/p/3296793.html

龙生   15 May 2017
View Details

初次安装Docker 运行出现的问题

Ubuntu 14.04 第一次安装Docker,运行hello-world 是可以的, 重启系统之后,运行hello-world 出现如下报错: Cannot connect to the Docker daemon. Is the docker daemon running on this host? 多方查找,解决如下: sudo su                       //切换到root service docker start      //启动docker service docker images              //显示所有images docker run hello-world  //重新运行 恩,是权限问题,当前用户没权限,root用户可以运行 from:http://blog.163.com/s2006203387@126/blog/static/533199572015111703735423/

龙生   15 May 2017
View Details

mysql存储过程示例

DROP PROCEDURE IF EXISTS proc_name; delimiter // create definer=root@localhost procedure proc_name( in pi_id int ) begin todo…… end// delimiter ;

龙生   15 May 2017
View Details

详解MySQL性能优化(二)

七、MySQL数据库Schema设计的性能优化 高效的模型设计 适度冗余-让Query尽两减少Join 大字段垂直分拆-summary表优化 大表水平分拆-基于类型的分拆优化 统计表-准实时优化 合适的数据类型 时间存储格式总类并不是太多,我们常用的主要就是DATETIME,DATE和TIMESTAMP这三种了。从存储空间来看TIMESTAMP最少,四个字节,而其他两种数据类型都是八个字节,多了一倍。而TIMESTAMP的缺点在于他只能存储从1970年之后的时间,而另外两种时间类型可以存放最早从1001年开始的时间。如果有需要存放早于1970年之前的时间的需求,我们必须放弃TIMESTAMP类型,但是只要我们不需要使用1970年之前的时间,最好尽量使用TIMESTAMP来减少存储空间的占用。 字符存储类型 CHAR[(M)]类型属于静态长度类型,存放长度完全以字符数来计算,所以最终的存储长度是基于字符集的,如latin1则最大存储长度为255字节,但是如果使用gbk则最大存储长度为510字节。CHAR类型的存储特点是不管我们实际存放多长数据,在数据库中都会存放M个字符,不够的通过空格补上,M默认为1。虽然CHAR会通过空格补齐存放的空间,但是在访问数据的时候,MySQL会忽略最后的所有空格,所以如果我们的实际数据中如果在最后确实需要空格,则不能使用CHAR类型来存放。 VARCHAR[(M)]属于动态存储长度类型,仅存占用实际存储数据的长度。TINYTEXT,TEXT,MEDIUMTEXT和LONGTEXT这四种类型同属于一种存储方式,都是动态存储长度类型,不同的仅仅是最大长度的限制。 事务优化 1. 脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。 2. 不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。 3. 幻读:是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。 Innodb在事务隔离级别方面支持的信息如下: 1.READ UNCOMMITTED 常被成为Dirty Reads(脏读),可以说是事务上的最低隔离级别:在普通的非锁定模式下SELECT的执行使我们看到的数据可能并不是查询发起时间点的数据,因而在这个隔离度下是非Consistent Reads(一致性读); 2.READ COMMITTED 这一隔离级别下,不会出现DirtyRead,但是可能出现Non-RepeatableReads(不可重复读)和PhantomReads(幻读)。 3. REPEATABLE READ REPEATABLE READ隔离级别是InnoDB默认的事务隔离级。在REPEATABLE READ隔离级别下,不会出现DirtyReads,也不会出现Non-Repeatable Read,但是仍然存在PhantomReads的可能性。 4.SERIALIZABLE SERIALIZABLE隔离级别是标准事务隔离级别中的最高级别。设置为SERIALIZABLE隔离级别之后,在事务中的任何时候所看到的数据都是事务启动时刻的状态,不论在这期间有没有其他事务已经修改了某些数据并提交。所以,SERIALIZABLE事务隔离级别下,PhantomReads也不会出现。 八、可扩展性设计之数据切分 数据的垂直切分 数据的垂直切分,也可以称之为纵向切分。将数据库想象成为由很多个一大块一大块的“数据块”(表)组成,我们垂直的将这些“数据块”切开,然后将他们分散到多台数据库主机上面。这样的切分方法就是一个垂直(纵向)的数据切分。 垂直切分的优点 ◆数据库的拆分简单明了,拆分规则明确; ◆应用程序模块清晰明确,整合容易; ◆数据维护方便易行,容易定位; 垂直切分的缺点 ◆部分表关联无法在数据库级别完成,需要在程序中完成; ◆对于访问极其频繁且数据量超大的表仍然存在性能平静,不一定能满足要求; ◆事务处理相对更为复杂; ◆切分达到一定程度之后,扩展性会遇到限制; ◆过读切分可能会带来系统过渡复杂而难以维护。 数据的水平切分 数据的垂直切分基本上可以简单的理解为按照表按照模块来切分数据,而水平切分就不再是按照表或者是功能模块来切分了。一般来说,简单的水平切分主要是将某个访问极其平凡的表再按照某个字段的某种规则来分散到多个表之中,每个表中包含一部分数据。 水平切分的优点 ◆表关联基本能够在数据库端全部完成; ◆不会存在某些超大型数据量和高负载的表遇到瓶颈的问题; ◆应用程序端整体架构改动相对较少; ◆事务处理相对简单; ◆只要切分规则能够定义好,基本上较难遇到扩展性限制; 水平切分的缺点 ◆切分规则相对更为复杂,很难抽象出一个能够满足整个数据库的切分规则; ◆后期数据的维护难度有所增加,人为手工定位数据更困难; ◆应用系统各模块耦合度较高,可能会对后面数据的迁移拆分造成一定的困难。 数据切分与整合中可能存在的问题 1.引入分布式事务的问题 完全可以将一个跨多个数据库的分布式事务分拆成多个仅处于单个数据库上面的小事务,并通过应用程序来总控各个小事务。当然,这样作的要求就是我们的俄应用程序必须要有足够的健壮性,当然也会给应用程序带来一些技术难度。 2.跨节点Join的问题 推荐通过应用程序来进行处理,先在驱动表所在的MySQLServer中取出相应的驱动结果集,然后根据驱动结果集再到被驱动表所在的MySQL Server中取出相应的数据。 3.跨节点合并排序分页问题 从多个数据源并行的取数据,然后应用程序汇总处理。 九、可扩展性设计之Cache与Search的利用 通过引入Cache(Redis、Memcached),减少数据库的访问,增加性能。 通过引入Search(Lucene、Solr、ElasticSearch),利用搜索引擎高效的全文索引和分词算法,以及高效的数据检索实现,来解决数据库和传统的Cache软件完全无法解决的全文模糊搜索、分类统计查询等功能。 以上就是本文的全部内容,希望大家可以喜欢。   from:http://www.jb51.net/article/70530.htm

龙生   15 May 2017
View Details

PHP实现RIJNDAEL_256加密(静态类)

 

龙生   15 May 2017
View Details

MySQL 的 20+ 条最佳实践

数据库操作是当今 Web 应用程序中的主要瓶颈。 不仅是 DBA(数据库管理员)需要为各种性能问题操心,程序员为做出准确的结构化表,优化查询性能和编写更优代码,也要费尽心思。 在本文中,我列出了一些针对程序员的 MySQL 优化技术。 在我们开始学习之前,我补充一点:你可以在 Envato Market 上找到大量的 MySQL 脚本和实用程序。   1.优化查询的查询缓存 大部分MySQL服务器都有查询缓存功能。这是提高性能的最有效的方法之一,这是由数据库引擎私下处理的。当同一个查询被多次执行,结果会直接从缓存里提取,这样速度就很快。 主要的问题是,这对程序员来说太简单了,不容易看到,我们很多人都容易忽略。我们实际上是可以组织查询缓存执行任务的。 ? 1 2 3 4 5 6 // query cache does NOT work $r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()");   // query cache works! $today = date("Y-m-d"); $r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'"); 查询缓存在第一行不执行的原因在于CURDTE()功能的使用。这适用于所有的非确定性功能,就像NOW()和RAND()等等。。。因为功能返回的结果是可变的。MySQL决定禁用查询器的查询缓存。我们所需要做的是通过添加一额外一行PHP,在查询前阻止它发生。   2. EXPLAIN你的选择查询 使用EXPLAIN关键词可以帮助了解MySQL是怎样运行你的查询的。这有助于发现瓶颈和查询或表结构的其它问题。 EXPLAIN的查询结果会展示哪一个索引被使用过,表示怎样扫描和储存的,等等。。。 选择一个SELECT查询(一个有连接的复杂查询会更好),在它的前面添加关键词EXPLAIN,这样就可以直接使用数据库了。结果会以一个漂亮的表来展示。例如,就好比我执行连接时忘了添加一栏的索引: 现在它只会从表2里面扫描9和16行,而非扫描7883行。经验法则是乘以所有“行”那一栏的数字,你的查询性能会跟结果数字成比例的。   3. 获取唯一行时使用LIMIT 1 有时当你查表时,你已经知道你正在查找的结果只有一行。你可能正在获取唯一记录,或者你可能只是查询是否存在满足你的WHERE子句条件的记录。 在这种情况下,将LIMIT 1添加到查询条件中可以提高性能。这样,数据库引擎将在找到刚刚第一个记录之后停止扫描记录,而不是遍历整个表或索引。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // do I have any users from Alabama?   // what NOT to do: $r = mysql_query("SELECT * FROM user WHERE state = 'Alabama'"); if(mysql_num_rows($r) > 0) {     // … }     // much better: $r = mysql_query("SELECT 1 FROM user WHERE state = 'Alabama' LIMIT 1"); if(mysql_num_rows($r) > 0) {     // … }   4. 索引搜索字段 索引不仅仅是为了主键或唯一键。如果你会在你的表中按照任何列搜索,你就都应该索引它们。 正如你所看到的,这个规则也适用于如 last_name LIKE a%' 的部分字符串搜索。当从字符串的开头搜索时,MySQL就可以使用那一列的索引。 你也应该明白什么样搜索可以不使用有规律的索引。例如,当搜索一个单词时(例如, WHERE post_content LIKE %apple%' […]

龙生   15 May 2017
View Details

MySQL存储过程中游标循环的跳出和继续操作示例

最近遇到这样的问题,在MySQL的存储过程中,游标操作时,需要执行一个conitnue的操作.众所周知,MySQL中的游标循环操作常用的有三种,LOOP,REPEAT,WHILE.三种循环,方式大同小异.以前从没用过,所以记下来,方便以后查阅. 1.REPEAT 复制代码代码如下: REPEAT Statements; UNTIL expression END REPEAT demo DECLARE num INT; DECLARE my_string  VARCHAR(255); REPEAT SET  my_string =CONCAT(my_string,num, , ); SET  num = num +1; UNTIL num <5 END REPEAT; 2.WHILE  复制代码代码如下: WHILE expression DO Statements; END WHILE demo DECLARE num INT; DECLARE my_string  VARCHAR(255); SET num =1; SET str = ; WHILE num  < span>10DO SET  my_string =CONCAT(my_string,num, , ); SET  num = num +1; END WHILE; 3.LOOP(这里面有非常重要的ITERATE,LEAVE) 复制代码代码如下: DECLARE num  INT; DECLARE str  VARCHAR(255); SET num =1; SET my_string = ; loop_label:  LOOP IF  […]

龙生   15 May 2017
View Details

MySQL字符串连接函数

MySQL中 concat 函数 使用方法: CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。 注意: 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。 一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col) MySQL的concat函数可以连接一个或者多个字符串,如 mysql> select concat( 10 ); + + | concat( 10 ) | + + | 10   | + + 1 row in set (0.00 sec) mysql> select concat( 11 , 22 , 33 ); + + | concat( 11 , 22 , 33 ) | + + | 112233 | + + 1 row in set (0.00 sec) MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL mysql> select concat( 11 , 22 ,null); + + […]

龙生   15 May 2017
View Details

c# WebBrowser如何伪造http referer

webbrowser1.Navigate(url, _self , null, Referer:http://www.xxxx.com );   from:http://blog.csdn.net/sunshuqian2005/article/details/23561535

龙生   15 May 2017
View Details

用n多的框架写同一个demo

最近有了比较长的空闲时间。 所以看了很多很多不同的语言,框架。 java用了很多年了,总觉得眼界都被java影响了,所以想从新开始学一点新的东西。 而一旦开始选择开始的路径,完美主义的小心思就出来作祟了。 泛泛的接触了好多好多东西,基本上主流的语言,框架都把入门文档看了个遍。 到最后都没有达到最初想学点东西的目的,反而看文档的能力提高不少 所以,我决定不再单纯的看了。 我觉得执行下面的计划,动手写写。这也是为什么文章开始就要写明发表时间,因为未来会发生什么谁也不知道,我得到的结果只是当下我认为的好结果而已。 仅此而已 这里是列表文本测试方式:controller层上返回服务器当前时间 new Date().getTime() //long类型 开发方式:使用各个框架的引导教程默认设置去写代码,尽量写最少的代码完成demo 测试的框架:jfinal(java),grails(groovy),play(scala),springboot-undertow(java),express(js),beego(golang),compojure(clojure) .看情况增加 测试内容:ab进行压测测试,开发效率(完成所花费的时间),上手难度,扩展性(面对需求频繁更改的可维护性) 压测命令:ab -n 100000 -c 1000 -k http://localhost:8080/ 测试机器:amdFX 6300 3.5G+8G+windows10 因为都是主观感受,因此对其他人来说没有任何参考价值 没有任何参考价值 没有任何参考价值 没有任何参考价值 重要的事情说三遍,免得别人以为我在宣扬啥。 下面开始贴图 jfinal jfianl是我用的最多的框架,目前整个公司也在用,真的用起来很爽,最喜欢orm层设计,可以不写字段,对于需要频繁变更数据库结构的前期开发非常顺手。扩展起来也很方便,毕竟是java系。上手的话和在测的这些比较对于0基础的朋友来说属于困难。 jfinal+tomcat9m 不打包,使用idea直接运行起来,配置文件里面关闭dev jfinal+tomcat8 war包 关闭dev jfinal + jetty9 war包 关闭dev spring spring是jee开发绕不过去的大山,springboot用的人越来越多,其实我之所以要看springboot只是对undertow这个框架感兴趣。因此测试结果也是直接测试undertow内核下的性能。 springboot上手难度的话个人感觉比jfianl简单一些,比着教程可以跑起来,不过对于不了解java的朋友来说 看到一大堆注解,会疯掉。 springboot+undertow idea中直接run scala scala号称是会干掉java的jvm语言,多范式,spark,这门语言本身有很强烈的光环,而且play作为非常牛逼的全栈框架,给人的体验是极爽的。写代码->刷新看结果,不需要重新编译。唯一感觉不好的是,scala这门语言好晦涩 .各种符号,各种+-*/,各种箭头。语言本身上手难度决定了这个框架的上手难度。 play groovy groovy是大家经常用却不知道它的语言,这么说的原因是,gradle就是groovy开发的。grails是groovy借鉴ruby on rails框架开发的web 框架,对新人极其友好,命令行里面,create-controller,create-doman,create-service。直到现在我还能回想起那种写代码顺畅的感觉。而且grails3以后,底层实现直接使用spring4+hibernate5。对于ssh系的开发人员来说,上手速度杠杠的。因此测试也是两种,console中直接执行使用的jetty,使用main函数执行使用springboot。而且由于本身是脚本语言,代码修改非常方便。 grails3 console中直接运行 grails3-springboot nodejs 作为nodejs杀手框架express,让前端人员在各种领域里面虐杀各种后台开发人员。俗话说的好,凡事能用js实现的东西,早晚要用js实现。上手速度没有比他更快了。而且写的是js的代码,简单又好学。nodejs真心不错的。 express4 clojure clojure 是jvm下面的一门lisp方言。俗话说,每过一段时间,总有一小撮人发现这个世界上还有另外一个世界叫lisp,并且他们妄想lisp能够统领全世界。其实lisp下面有不少web框架可以用,为什么选择compojure这个框架,主要原因还是http-kit。compojure默认配置使用jetty7执行,效率没法看了,但是换成http-kit内核以后,速度飞起.测试完http-kit以后,我对这个框架产生非常大的兴趣,有谁知道有http-kit有哪些应用吗? 这个速度真的是可怕啊。 上手难度:你知道lisp吗? compojure 默认配置 compojure+http-kit golang golang作为google亲儿子语言,不用多说了。好多朋友都喜欢,我去年也用了好一阵子,确实很好,而且beego作为国人开发的框架,教程的丰富程度,从视频到文字应有尽有。但是,不知道是什么原因,在我的机器上beego测试出来的速度有点匪夷所思的慢,这个值大家看看就成了 这个值大家看看就成了 这个值大家看看就成了这个值大家看看就成了 重要的事情说三遍,要不然我就成beego黑了. beego 默认配置 测试全部完成以后发现,其实测试本身没啥意义,因为都是默认配置,和优化以后效率就没有什么可比性了。因此只能图个乐呵。 茄子萝卜各有所爱,何必在意细节 from:https://my.oschina.net/jsmagic/blog/802851

龙生   15 May 2017
View Details