2013年1月29日星期二
MongoDB : 用mongoexport导出collection数据为json文件
2013年1月6日星期日
MongoDB : 自定义函数在客户端shell调用和在server端调用,数据传输的差别
db.system.js.save({
_id : 'somefunc',
value : function(src_mr, dst_name){
d = db.createCollection(dst_name);
var src = db[src_mr];
var d = src.find();
var dst = db[dst_name];
while (d.hasNext()) {
var r =d.next();
var x = r._id;
x.value = r.value;
// some modify on x ....
dst.insert(x);
}
}
});
在客户端执行运算:
db.loadServerScripts();
somefunc('srcmr', 'dstmr');
会把srcmr的数据传回客户端,在客户端的机器算好了,再远程写入mongodb server,抓包可以看到网络流量较大。
db.eval("somefunc('srcmr', 'dstmr');");
不会把数据传回客户端,而是在服务端mongdb进行计算,直接写入,抓包可以看到网络流量很小。
因此,可以在客户端调试小规模数据,实际应用时在server端db.eval执行。
2013年1月5日星期六
MongoDB : findOne 跟 find
x = db.sometable.findOne();
find是返回一个cursor,要用next() 才能取出真正的数据
cur = db.sometable.find().limit(1)
x = cur.next()
用forEach循环处理:
db.sitelog.find().limit(10).forEach(
function(r) {
t = somefunc(r);
printjson(t);
}
);
用while循环处理,有时候会提示db not response 错误退出,超时设为-1也无效
while(cur.hasNext()){
r = cur.next();
t = somefunc(r);
printjson(t);
}MongoDB : db.loadServerScripts(); 载入的函数调用split失败的问题
db.system.js.save({
_id : 'somefunc',
value :
function(d) {
// ....
s = split(/\s+/, somestring);
// ...
});调用somefunc函数时,会提示不能做split:
db.loadServerScripts();
somefunc(somedata);
把 s = split(/\s+/, somestring); 改成 s = somestring.split(/\s/+); 就行了
2011年6月1日星期三
Head First SQL
指定某个列默认值建表: test_column varchar(100) NOT NULL DEFAULT ‘’
_ 指定单个任意字符查询:select * from test_table where test_column like ‘_ttt’;
坚持到200页,实在撑不住了,图太多,看的眼花,放弃了。
2011年3月13日星期日
PostgreSQL : 在windows下的安装配置
1、安装
下载安装包,语言要选"简体中文,新加坡"的,不然后面服务安装会失败。
2、配置
切换用户:runas /noprofile /env /user:postgres "cmd"
进入命令界面:psql
建数据库:create database mydb;
建新用户:create user someuser password 'somepassword';
授权:
GRANT ALL PRIVILEGES ON database somedb TO someadmin;REVOKE ALL PRIVILEGES ON somedb from someadmin;GRANT select ON somedb.sometable TO someuser;
3、其他
备份数据库:pq_dump somedb > somedb.dump
恢复数据库:psql -d somedb -f somedb.dump
2011年1月2日星期日
CodeIgniter + Mysql : 中文表单乱码问题
上周用CodeIgniter搞了2个简单的前台页面,发现表单传中文内容正常,往Mysql的表里写的时候总是乱码。
折腾了一阵,总算搞定,参考资料如下:
配置说明:
mysql编码配置:
mysql建表命令:
create table sometable ( id int unsigned, user varchar(30), test text);
CodeIgniter的system\application\config\config.php中设置:
CodeIgniter的system\application\config\database.php设置:
使用说明:
- php文件的编码是gb2312,用 $this->db->insert($table, $data); 往表里插数据是正常的gb2312编码。
- perl脚本的编码是gb2312,用DBI连接数据库时不用显式指定编码,可直接取回表中gb2312编码的内容。
2010年12月20日星期一
2010年12月6日星期一
笔记 : Perl DBI
Storable模块:nfreeze比freeze慢,但是保证可跨系统使用
Fcntl的flock
DB_FILE可以有三种存储形式 HASH、B树、RECNO(文本)
MLDBM 支持将复杂的数据结构写入文件
DBI的PrinterError对应warn,RaiseError对应die
错误消息:$DBI::errstr
quote函数自动转义引号
trace函数指定输出DB操作详情,debug用
dump_results打印执行结果,指定写入文件
bind_param_inout指定输出的参数写入到什么变量
bind_col
$sth->{NUM_OF_FIELDS}返回的列数
$sth->{NAME}->[$i-1] 第i列的名字
AutoCommit如果设为0,在执行一系列操作后,$dbh->commit(); if($@) { $dbh->rollback(); },较稳妥。
ODBC标准化了错误码,支持更多函数操作
DBI PROXY : 转发client的query给db,把db返回的结果转给client,这样中转一下,unix机器就能访问windows access的数据库
2010年11月21日星期日
笔记 : SQL Cookbook
连接字符串: concat
条件逻辑: select col_a, case when col_b<100 then 'small' else 'big' end as state from sometable
按某个字段的最后两个字符升序:select col_a,col_b from sometable order by substring(col_b, length(col_b)-2)
重叠结果输出:[SELECT SQL A] union all [SELECT SQL B]
union all不删重复项;union删重复项;除非必要,否则不要用union、distinct
从一个表中取数据导入另一个表:insert into table1(col_a, col_b) select (col_aa, col_bb) from table2 where colcc='somevalue'
出现三次以上部门:select col_a from sometable group by col_a having count(*)>=3
列出索引:show index from emp
正则:select data from sometable where data regexp '[^0-9]' = 0
将同一部门的人名合在一行显示:select dept, group_concat(name order by id, ',') from emp group by dept
滚动结果集,每页五行(limit 5),显示第2页(offset 5):select col_a from sometable order by col_a limit 5 offset 5