5
08年5月
如何提高mysql load data infile的速度
测试数据2.5G,共有数据9427567条。用的mysql的large服务器的配置。
load一次需要大概10分钟左右。
建的表用的是MYISAM,调整了几个session的参数值
SET SESSION BULK_INSERT_BUFFER_SIZE=256217728;
SET SESSION MYISAM_SORT_BUFFER_SIZE=256217728;
运行结果如下
Query OK, 9427567 rows affected, 1558 warnings (3 min 55.21 sec)
Records: 9427567 Deleted: 0 Skipped: 0 Warnings: 0
google到的还可以
set global KEY_BUFFER_SIZE=256217728;
alter table tablename disable keys;
如何load数据里面带反斜杠(backslash)”\” 的数据
由于如果你没有指定FIELDS子句,则默认值为假设您写下如下语句时的值:
FIELDS TERMINATED BY ‘\t’ ENCLOSED BY ” ESCAPED BY ‘\\’
所以,如果你的数据里面有反斜杠(backslash)”\”的时候,数据会出现被截断的问题。出现这种问题,只要写上如下的fields子句即可
FIELDS TERMINATED BY ‘\t’ ENCLOSED BY ” ESCAPED BY ”
如何load不同编码的数据
原来用的4.X的mysql,我是select INTO OUTFILE ,只后用iconv,或者其他软件来做。可以参考这里,但是由于这次数据大,用ultraedit等软件打开都要半天。好在新版的mysql可以增加一个新的参数
CHARACTER SET gbk
我的文本数据是GBK的编码,数据表是utf8的,用这种方法测试成功。
如何load的时候只insert特定的列
比如表里面有比元数据多的列。可以在load的时候指定要插入的字段名字。
示例的代码如下:
LOAD DATA INFILE '~/data.txt'
INTO TABLE fb0505
CHARACTER SET gbk
FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY ''
LINES TERMINATED BY '\n' STARTING BY ''
(seller_id,fb_type,fb_date,item_url);
其中表fb0505里面还有一列是id。
贝贝爸 发表在 原创技术文章 |
24
08年4月
一直用python读文件都是文本文件。用的方法是:
但是前两天读一个几百兆的大文件的时候,遇到了奇怪的问题,觉得是内容没有读完。定位最后读到的行,用emeditor打开,发现有一个怪字符“”。编码是“\x001a”,一查,原来是文件结束符号。
一直郁闷,奇怪为啥文本文件里面有文件结束符,试了好多办法,都不行,最后经limodou指点,原来这种情况要当成二进制文件来读。
lines=open('ft.txt','rb')
文件内容如下:
两种不同情况的结果如下:
>>> f=open('ft.txt')
>>> f.read()
'abc'
>>> f=open('ft.txt','rb')
>>> f.read()
'abc\x1adefg'
贝贝爸 发表在 原创技术文章 |
22
08年4月
jquery是个好东西,现在有很多基于它的plugin,tablesorter 就是一个。
上面有好多例子,就不转贴了。最近做了一个小东西,用到了它。
因为是财务的东西,金额用到了千分位,就是每多三位,加一个逗号。原来用都是按照数字来的,加了这个逗号之后,tablesorter不认为它是数字了,他认为234.00比1,234.53大。这也难怪,看了例子,如果是这种货币格式,前面如果是$符号的话,这种格式排序是没问题的。
仔细看了一下文档,原来人家已经考虑到了这样的问题,加下面代码就可以了。
$("#myTable").tablesorter({
headers: { 4: {sorter:"currency"}}
});
测试通过
另:推荐一篇关于中国教育讨论的文章
贝贝爸 发表在 原创技术文章 |
15
08年2月
要实现这样一个功能,一个活动很多人报名,后台做操作界面,可以给某些数据做一下标记。
本地开发,本地的环境+测试数据测试通过,到了线上,就死活不行。
因为表单有简单的校验,用了javascript的document.submit()。总是报错,说 access is denied
原来怀疑是因为提交的按钮在浮动层的原因,后来发现数据量大了就不行,因为每条数据会有checkbox。
网上google了半天,也没有对症的解决方法,大多是安全因素造成的。在冥思苦想没有结果,正一筹莫展的时候。突然想起了GET提交的数据长度是有2048个字节的限制的。
然后查看了代码,原来从别的地方复制过来的form表单,用的是get方法,改成method=”post”后,问题解决。
车到山前啊。
贝贝爸 发表在 原创技术文章 |
18
07年12月
google的toolbar是我浏览器装的唯一一个工具条,gmail是我现在使用的主力邮箱,google toolbar的功能就不介绍了,它和google的其它产品结合的比较好。
google toolbar可以添加Custom Button,比如你经常在A网站搜索,可以在搜索框的地方点右键,菜单最下面会有一个“Generate Custom Search…”,按照提示走,可以在你的工具条上增加一个按钮,如果A网站设置了favorite icon的话,按钮就是这个icon。你可以在工具条搜索的地方输入要搜索的内容,点击自己增加的那个button,那么会调用A网站的搜索程序来进行搜索。
可以用本站右上角的搜索框测试一下,一定要先装google的toolbar哦。
gmail也可以增加到toolbar上,但是有一个问题,就是,增加后是http连接的,但是有时候可能会因为网络或其他原因,http不能用,每次都要去修改为https的连接。
找到2个方法
方法一
用https://www.gmail.com/打开gmail,在左边的 Invite a friend –>Give Gmail to: 输入框里点邮件,生成一个custom的search,优点是简单,方便,缺点是,不能搜索,只是加了一个链接而已。
方法二
首先按正常方法增加一个gmail button,然后要改一下配置文件,开始–>运行,输入
%USERPROFILE%\Local Settings\Application Data\Google\Custom Buttons
会有几个xml文件,我这里是一个
toolbar.google.com_J66T77NJDBMW4FEUU7FA.xml
打开,搜索
http://mail.google.com
替换为
https://mail.google.com,应该有三个位置。
保存后,重新开浏览器,发现搜索和直接点击都已经是https的连接。
更多google api的信息 http://www.google.com/tools/toolbar/buttons/apis/
贝贝爸 发表在 原创技术文章 |
13
07年12月
需要
Groovy Version: 1.5.0
resin pro 3.1.4
groovy的安装,略
启动resin后,会有一个%RESIN_HOME%\webapps\ROOT\WEB-INF\web.xml文件。
增加如下内容
<servlet>
<servlet-name>GroovyServlet</servlet-name>
<servlet-class>groovy.servlet.GroovyServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>GroovyTemplate</servlet-name>
<servlet-class>groovy.servlet.TemplateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GroovyServlet</servlet-name>
<url-pattern>*.groovy</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GroovyTemplate</servlet-name>
<url-pattern>*.gsp</url-pattern>
</servlet-mapping>
copy %GROOVY_HOME%\lib\下的
groovy-1.5.0.jar
asm-2.2.jar
antlr-2.7.6.jar
到
%RESIN_HOME%\lib
启动resin,在
%RESIN_HOME%\webapps\ROOT下新建2个文件
hello.gsp
————-
<%
def h="hello"
def w="world"
println "$h $w"
print 2+2
println " times"
%>
hello.groovy
——-
println """
<html>
<head>
<title>Groovy Servlet</title>
</head>
<body>
Hello world @ ${new Date()}
</body>
</html>
"""
运行后
http://localhost:8080/1.gsp
http://localhost:8080/a.groovy
的内容分别为
hello world 4 times
Hello world @ Thu Dec 13 23:04:18 CST 2007
贝贝爸 发表在 原创技术文章 |
6
07年12月
在调试javascript代码的时候在a.html引用了b.js这个文件。
原来测试都没有问题,但是paste了一些原来的老代码后,ie出现js报错,但是firefox不抱错。
报错的信息如下:
return statement outside of functions
狗了半天,说是retrun写的位置不对,但是新写的代码和老的代码都没问题啊,一直在用。没办法,只能一段段的删除
期间还报过下面的错误
XXX is not defined
XXX是一个函数里面传过来的变量。函数都没用,居然也抱错。狠奇怪。
最后只剩2个function了,中间有一段代码的注释,是中文的。我把注释删掉,好了!
突然想起来问题所在了,原来是编码问题。上面的a.html是utf-8编码,而js里面的中文是gbk的编码,由于a.html是全英文的,所以没注意编码。而老的代码一直都是在gbk或者gb2312编码的页面上用,所以一直也没问题。
最后修改a.html为gbk的编码,问题解决。
比较好的习惯可能应该是公用的js代码里面不要用中文的注释。。
贝贝爸 发表在 原创技术文章, 日记图片 |
18
07年10月
原来写过一个程序,需要按照数据的更新日期的倒叙来排序来排序。oracle好像是把null当作最大的值,测试了varchar2和number也是这样认为的。
阅读全部»
贝贝爸 发表在 原创技术文章 |
27
07年9月
选取一个name为”S_03_22″的input text框的上一个td的text值
$(”input[@name=S_03_22]”).parent().prev().text()
名字以”S_”开始,并且不是以”_R”结尾的
$(”input[@name^=’S_’]”).not(”[@name$=’_R’]”)
一个名为radio_01的radio所选的值
$(”input[@name=radio_01][@checked]”).val();
贝贝爸 发表在 原创技术文章 |
21
07年8月
一张多用户的通讯记录表,主要是手机信息,每个用户可以建立自己的联系人组。
原来数据对数据没有校验,用户可以在一个组里面输入重复手机号码,如果数据量大,会造成数据重复。
所以要做一个唯一性的索引,如下:
create unique index inx_uniq_cellphone_onegroup on addresslist (cellphone, groupid, operatorid);
目的是保证每个用户的每个组里面,不能有同样的cellphone。
但是建立的时候出错,因为里面原来有重复的数据。
清除重复的数据,用如下的sql,如果重复的就删除rowid不等于max(rowid)的那条记录。
delete addresslist
where rowid not in (select rowid1
from addresslist a,
(select cellphone,
groupid,
operatorid,
max(rowid) rowid1,
count(*)
from addresslist
group by cellphone, groupid, operatorid) b
where a.cellphone = b.cellphone
and a.groupid = b.groupid
and a.operatorid = b.operatorid
and a.rowid = b.rowid1)
贝贝爸 发表在 原创技术文章 |