NoSQL 数据建模技术
作者: Claymore 时间: 2012-05-15 13:12:42
本文由 酷壳coolshell 译自墙外文章“NoSQL Data Modeling Techniques”。
这篇文章看完之后,你可能会对NoSQL的数据结构会有些感觉。我的感觉是,关系型数据库想把一致性,完整性,索引,CRUD都干 好,NoSQL只干某一种事,但是牺牲了很多别的东西。总体来说,我觉得NoSQL更适合做Cache。
下面是正文——
NoSQL 数据库经常被用作很多非功能性的地方,如,扩展性,性能和一致性的地方。这些NoSQL的特性在理论和实践中都正在被大众广泛地研究着,研究的热点正是那些和性能分布式相关的非功能性的东西,我们都知道 CAP 理论被 很好地应用于了 NoSQL 系统中(陈皓注:CAP即,一致性(Consistency), 可用性(Availability), 分区容忍性(Partition tolerance),在分布式系统中,这三个要素最多只能同时实现两个,而NoSQL一般放弃的是一致性)。但在另一方面,NoSQL的数据建模技术却 因为缺乏像关系型数据库那样的基础理论没有被世人很好地研究。这篇文章从数据建模方面对NoSQL家族进行了比较,并讨论几个常见的数据建模技术。
要开始讨论数据建模技术,我们不得不或多或少地先系统地看一下NoSQL数据模型的成长的趋势,以此我们可以了一些他们内在的联系。下图是 NoSQL家族的进化图,我们可以看到这样的进化:Key-Value时代,BigTable时代,Document时代,全文搜索时代,和Graph数 据库时代:(陈皓注:注意图中SQL说的那句话,NoSQL再这样发展下去就是SQL了,哈哈。)
阅读全文...
Ubuntu下安装PHP-FPM
作者: Claymore 时间: 2012-03-16 15:06:44
- def init_nmp():
- install_nginx()
- install_php()
- install_phpfpm()
- def install_nginx():
- sudo("add-apt-repository ppa:nginx/stable")
- sudo("apt-get update")
- sudo("apt-get -y -q install nginx-full nginx-common")
- def install_php():
- # More packages upon request
- sudo("apt-get -y -q --force-yes install php5-cli php5-cgi php5-mysql")
- sudo("apt-get -y -q --force-yes install php5-mcrypt libmcrypt mcrypt")
- def install_phpfpm():
- # TODO: use canonical php-fpm package when available
- sudo("add-apt-repository ppa:brianmercer/php")
- sudo("apt-get update")
- sudo("apt-get -y -q install php5-fpm")
在/etc/php5/fpm/php5-fpm.conf里将tcp修改成unix socket方式,单机情况下性能更好。
- listen = /var/run/php5-fpm.sock
- ;listen = 127.0.0.1:9000
Nginx里的配置:
- location ~ \.php$ {
- try_files $uri = 404;
- include /etc/nginx/fastcgi_params;
- fastcgi_pass unix:/var/run/php5-fpm.sock;
- fastcgi_index index.php;
- fastcgi_split_path_info ^(.+\.php)(.*)$;
- include fastcgi_params;
- fastcgi_intercept_errors on;
- fastcgi_ignore_client_abort off;
- fastcgi_connect_timeout 60;
- fastcgi_send_timeout 180;
- fastcgi_read_timeout 180;
- fastcgi_buffer_size 128k;
- fastcgi_buffers 4 256k;
- fastcgi_busy_buffers_size 256k;
- fastcgi_temp_file_write_size 256k;
- }
阅读全文...
PHP的表单类 Zebra_Form
作者: Claymore 时间: 2012-03-15 11:08:31
Zebra_Form 是一个 PHP 类用于简化表单的创建和数据验证。
示例代码:
- <?php
- // include the Zebra_Form class
- require 'path/to/Zebra_Form.php';
- // instantiate a Zebra_Form object
- $form = new Zebra_Form('form');
- // the label for the "email" field
- $form->add('label', 'label_email', 'email', 'Email');
- // add the "email" field
- // the "&" symbol is there so that $obj will be a reference to the object in PHP 4
- // for PHP 5+ there is no need for it
- $obj = & $form->add('text', 'email', '', array('autocomplete' => 'off'));
- // set rules
- $obj->set_rule(array(
- // error messages will be sent to a variable called "error", usable in custom templates
- 'required' => array('error', 'Email is required!'),
- 'email' => array('error', 'Email address seems to be invalid!'),
- ));
- // "password"
- $form->add('label', 'label_password', 'password', 'Password');
- $obj = & $form->add('password', 'password', '', array('autocomplete' => 'off'));
- $obj->set_rule(array(
- 'required' => array('error', 'Password is required!'),
- 'length' => array(6, 10, 'error', 'The password must have between 6 and 10 characters'),
- ));
- // "remember me"
- $form->add('checkbox', 'remember_me', 'yes');
- $form->add('label', 'label_remember_me_yes', 'remember_me_yes', 'Remember me');
- // "submit"
- $form->add('submit', 'btnsubmit', 'Submit');
- // validate the form
- if ($form->validate()) {
- // do stuff here
- }
- // auto generate output, labels above form elements
- $form->render();
- ?>
阅读全文...
25 个精美的后台管理界面模板和布局
作者: Claymore 时间: 2012-02-20 13:00:43
load data infile 导入数据 InnoDB 外键约束
作者: Claymore 时间: 2012-02-15 16:36:05
用户表:user
主键:id
内容表:post
主键:id
外键:user_id(关联到 user 表的主键 id)
post 表的数据文件存在文本文件中,字段之间用 tab 分隔,当要把文件导入到 post 表时,因 user 和 post 都是 InnoDB 引擎的,有外键约束,运行导入语句:
load data infile '/home/leakon/post.sql' ignore into table post ignore 1 lines ( user_id, title, unixtime );
MySQL 报错,信息如下:
Cannot add or update a child row: a foreign key constraint fails (`leakon/post`, CONSTRAINT `post_FK_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`))
反复尝试,总是失败,后来查了一下解决办法,只要在装载数据之前,插入下述语句,即可暂时关闭外键约束检查:
SET FOREIGN_KEY_CHECKS = 0;
然后再次运行 load data infile 语句,即可立即导入数据。
阅读全文...
2012-02-12 Sun. Sunny - 年后思绪
作者: Claymore 时间: 2012-02-13 00:50:44
一年后的现在,感觉思绪有点混乱了,或者说,脑子里产生了一些疑问。现在的工作蛮好,虽然是家小公司,但是工作也比较有激情,而且工作的事情也比较喜欢,可是唯一的缺点是,公司再项目开发中没有好的经验,当然我只是在项目开发工作中对这些工作步骤产生了疑惑:应不应该这样做?这样做对不对?有没有更好的方式?或者其他开发方式?这种疑问是一点一滴积累起来的,当然我自己也找不到问题的答案,就如同事说的那样,我们也都是在“摸索”,“摸索”一套适合我们公司自己的开发经验。对于这样的回答,没有解除我的疑虑,而更加肯定了我的怀疑。当然,除了这些疑虑者外,公司的其他方面都挺好,我很喜欢。最近也偶尔会去看看招聘,看着喜欢的就投了,虽然没投几份。也跟上级坦白说了,我打算离职,希望赶快招新人来接手我的工作。
阅读全文...
28 个必备的 Linux 命令行工具
作者: Claymore 时间: 2011-11-29 18:06:06
XP系统远程桌面连接使用administrator账号空密码登录
作者: Claymore 时间: 2011-11-29 18:01:05
LINUX远程桌面设置(tsclient,rdesktop)
作者: Claymore 时间: 2011-11-29 17:59:18
ubuntu 自带了tsclient (应用程序→internet→终端服务客户端)。使用它可以很方便的连接到windows系统.
但是他的缺点是很明显的,分辨率不能自定义。默认的分辨率,使得远程窗口太小;全屏来回切换又太麻烦(ctrl+alt+enter),其他的几个分辨率 要么太小,要么会覆盖掉ubuntu的上下工具栏.
所以最好使用rdesktop来指定分辨率,让远程桌面刚好填充到空白区域:
在终端里敲:
rdesktop 远程ip -u 用户名 -p 密码 -a 16 -g 1265x728 -r sound:local -5
其中-g 参数就是指定分辨率。因为我是1280*800 所以我使用1265*728的分辨率是正好的。 你可以根据你的情况来调整分辨率,找到一个最佳值。
其中-a参数指定的是16色。
但这有个缺点,就是每次都要敲一堆参数,太麻烦。所以,我们可以使用别名来简化这个命令。
打开~/.bashrc 这个文件。在里面可以添加别名(写在最后面就可以了):
例如我的:
#rdesktop
alias rdp='rdesktop -a 16 -g 1265x728 -r sound:local -5 '
关闭终端。重新打开终端,此时只要敲 rdp ip地址 -u 用户名 -p 密码 就可以了。
而且你还可以把你常用的远程连接写成别名:
alias rdp1='rdesktop 192.168.3.203 -u administrator -p 123456 -a 16 -g 1265x728 -r sound:local -5 '
这样只要敲rdp1就可以打开了。
over。
阅读全文...
Enterprise Architect 中文经典教程
作者: Claymore 时间: 2011-11-29 17:54:54
一、Enterprise Architect简介
Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件(Computer Aided Software Engineering)。EA不同于普通的UML画图工具(如VISIO),它将支撑系统开发的全过程。在需求分析阶段,系统分析与设计阶段,系统开发 及部署等方面有着强大的支持,同时加上对10种编程语言的正反向工程,项目管理,文档生成,数据建模等方面。可以让系统开发中各个角色都获得最好的开发效 率。
二、创建新项目
安装好了EA汉化版后,启动软件。点击“创建新的项目”,打开创建新项目对话框。

【图1】
这里可以选择各种的初始的模板包。

阅读全文...












