mysql分表理论

mysql在数据量大的时候一般采用分库分表的办法来解决读写慢的问题,为什么分库分表之后读写性能就可以提高了呢?
这里尝试做一下分析:

  • 分库有利于利用更多的硬件来提供服务
  • 分表的依据:
        

              

    1. 单表过大时,索引随之就增大;查询的时候,如果索引不在内存中,大的索引需要更多的载入时间;扫描索引的时间也会变大。写入(增、删、改)的时候,大的索引更新速度也慢。
    2.         

    3. 在对表做写操作时,整个表的query cache将失效,大表失效的cache多,而且失效的几率也大,小表的相反。
    4.     

分库分表的缺点:

  1. 无法做联表查询操作,不过这未尝不是好事,对于大数据量,联表查询基本是不建议使用的。
  2.  

相关资料:
http://zhengdl126.javaeye.com/blog/419850

关于Linux服务器时间的一些命令

一、时区
    1. 查看当前时区
cat /etc/sysconfig/clock

二、时间
      1、查看时间和日期
              date
      2、设置时间和日期
           将系统日期设定成1996年6月10日的命令
              date -s 06/22/96
           将系统时间设定成下午1点52分0秒的命令
              date -s 13:52:00
      3. 将当前时间和日期写入BIOS,避免重启后失效
              hwclock -w
备注:
      更详细的命令说明请参加man
参考:
      http://www.bitscn.com/linux/system_manage/200604/6898.html

http://www.hypexr.org/linux_date_time_help.php

PHP中的数据类型

大家都知道,PHP中的整型是long型的,对于:

  1. <?PHP
  2. echo 2888888888;

在32位机器上已经超过了long型的表达范围,应该输出负数吧,但是没有,为什么呢?

好像:
PHP在解析的时候,不是遇见数字就是long型的,至少这里被解释成了DOUBLE型的了,PHP中的数据类型:

  1. /* data types */
  2. /* All data types <= IS_BOOL have their constructor/destructors skipped */
  3. #define IS_NULL     0
  4. #define IS_LONG     1
  5. #define IS_DOUBLE   2
  6. #define IS_BOOL     3
  7. #define IS_ARRAY    4
  8. #define IS_OBJECT   5
  9. #define IS_STRING   6
  10. #define IS_RESOURCE 7
  11. #define IS_CONSTANT 8
  12. #define IS_CONSTANT_ARRAY   9
  13. /* Ugly hack to support constants as static array indices */
  14. #define IS_CONSTANT_INDEX   0x80

在echo的时候总是把数据通过: zend_make_printable_zval(.. 函数转换成char * ,len ,然后输出的。

zend.h中定义了数据的保存方式:

 
  1. typedef union _zvalue_value {
  2.     long lval;                  /* long value */
  3.     double dval;                /* double value */
  4.     struct {
  5.         char *val;
  6.         int len;
  7.     } str;
  8.     HashTable *ht;              /* hash table value */
  9.     zend_object_value obj;
  10. } zvalue_value;
  11. struct _zval_struct {
  12.     /* Variable information */
  13.     zvalue_value value;     /* value */
  14.     zend_uint refcount;
  15.     zend_uchar type;    /* active type */
  16.     zend_uchar is_ref;
  17. };

具体还有更多东西需要研究,现在没时间了。。。

基金及其种类

基金是一种间接的证券投资方式。基金管理公司通过发行基金单位,集中投资者的资金,由基金托管人(即具有资格的银行)托管,由基金管理人管理和运用资金,从事股票、债券等金融工具投资,然后共担投资风险、分享收益。根据不同标准,可以将证券投资基金划分为不同的种类:

———根据基金单位是否可增加或赎回,可分为开放式基金和封闭式基金。开放式基金不上市交易,一般通过银行申购和赎回,基金规模不固定;封闭式基金有固定的存续期,期间基金规模固定,一般在证券交易场所上市交易,投资者通过二级市场买卖基金单位。 

———根据组织形态的不同,可分为公司型基金和契约型基金。基金通过发行基金股份成立投资基金公司的形式设立,通常称为公司型基金;由基金管理人、基金托管人和投资人三方通过基金契约设立,通常称为契约型基金。目前我国的证券投资基金均为契约型基金。

———根据投资风险与收益的不同,可分为成长型、收入型和平衡型基金。

———根据投资对象的不同,可分为股票基金、债券基金、货币市场基金、期货基金等。

买基金很简单,可以在证券大厅交易,即在二级市场买卖,和普通股票投资一样。也可以通过和基金合作的银行代卖点申购,很多银行都有基金销售,工商银行和建行。如果要买的话你可以详细询问一下相关费用,利息比;然后再研究研究基金管理公司的内部情况和以往业绩。
开放式基金的基金单位的总数不固定,可根据发展要求追加发行,而投资者也可以赎回,赎回价格等于现期净资产价值扣除手续费。
由于投资者可以自由地加入或退出这种开放式投资基金,而且对投资者人数也没有限制,所以又将这类基金称为共同基金。大多数的投资基金都属于开放式的。
封闭式基金发行总额有限制,一旦完成发行计划,就不再追加发行。投资者也不可以进行赎回,但基金单位可以在证券交易所或者柜台市场公开转让,其转让价格由市场供求决定。

两者的区别如下:

  1. 基金规模的可变性不同。开放式基金发行的基金单位是可赎回的,而且投资者可随时申购基金单位,所以基金的规模不固定;封闭式基金规模是固定不变的。
  2. 基金单位的交易价格不同。开放式基金的基金单位的买卖价格是以基金单位对应的资产净值为基础,不会出现折价现象。封闭式基金单位的价格更多地会受到市场供求关系的影响,价格波动较大。
  3. 基金单位的买卖途径不同。开放式基金的投资者可随时直接向基金管理公司购买或赎回基金,手续费较低。封闭式基金的买卖类似于股票交易,可在证券市场买卖,需要缴手续费和证券交易税。一般而言,费用高于开放式基金。
  4. 投资策略不同。开放式基金必须保留一部分基金,以便应付投资者随时赎回,进行长期投资会受到一定限制。而封闭式基金不可赎回,无须提取准备金,能够充分运用资金,进行长期投资,取得长期经营绩效。
  5. 所要求的市场条件不同。开放式基金的灵活性较大,资金规模伸缩比较容易,所以适用于开放程度较高、规模较大的金融市场;而封闭式基金正好相反,适用于金融制度尚不完善、开放程度较低且规模较小的金融市场。

原文: http://zhidao.baidu.com/question/21263717.html

软件负载均衡 haproxy

官方地址: http://haproxy.1wt.eu/

在测试机上安装了一个,安装非常简单,参考文档:
http://blog.51yip.com/server/868.html

具体的性能和工作细节还不了解,需要阅读以下它的文档的。

配置说明:

1.4系列参考配置文件

http://haproxy.1wt.eu/download/1.4/doc/configuration.txt

1.3系列参考配置文件

http://haproxy.1wt.eu/download/1.3/doc/configuration.txt

特色

  • L7交换
  • 采用epoll,效率很高
  • 配置简单灵活,部署很容易
  • Graceful restart – 不影响已有连接
  • Web监控界面 – 清晰直观

内容分发(Content Switching)

  • ACL定义规则
  • ACL灵活组合选择分发backend
  • 请求/响应头改写

负载均衡和过载保护

  • 负载均衡策略:加权round-robin、Source、URL
  • Sticky sessions
  • 接入连接数限制
  • 后端服务器健康监测

—————————————
HAproxy与LVS比较

  • HAProxy效率不如LVS

    User级 vs. 内核级

  • HAProxy部署简单

    一个程序 vs. 内核patch

  • HAProxy功能丰富

    L7 vs. L4

vpn 与 windows路由设置

今天我的blog访问不了,以为是bluehost的问题,毕竟用的时间还不长,不了解其服务质量,于是就通过AliveChat问了一下,人家说:
Derek:  [6:09:23 AM] I can see your site just fine.

也不管我是否满意,就直接断掉了,我感觉估计是因为我用了vpn的缘故,断掉vpn后,可以访问了,哈哈

既然是vpn的问题,还可以通过修改路由的办法来解决,一般来讲,vpn只处理需要自己处理的那部分访问就行了,但是vpn添加默认路由的metric比本机网卡设置的默认路由的metric小,所以所有的访问都优先走vpn了,如图:

其中:
192.168.1.102 是我本机的IP
10.212.12.80是vpn的IP

添加一条路由:
route add 66.147.244.189 192.168.1.1 metric 2 if 15
其中: if 15 是指定接口,如果你不知道接口号的话,指定网关也可以,如:
route add 66.147.244.189 192.168.1.1 metric 2
这里没有指定mask,默认是: 255.255.255.255, 所以这里正好可以不指定,如果需要指定的话,如:
route add 66.147.244.189 mask 255.255.255.255  192.168.1.1 metric 2

其实修改192.168.1.102的metric也是可以的,如:
> route CHANGE 0.0.0.0 MASK 0.0.0.0 192.168.1.1 METRIC 22 IF 15
CHANGE 只用于修改网关和/或跃点数。

但是,

  1. 该命令需要管理员权限
  2. 修改完使用route print命令看看修改的生效没有,不是你写多少就是多少的,不知道为什么

sae 的sdk中文件名过滤的bug

  • 不应该使用fnmatch();函数来做匹配,该函数在windows上不支持,目前非posix的系统上都不支持;修改为使用preg_match;修改_sdk_internal/core.function.php 中函数: VisitFilesByPath
        
 
  1. if(preg_match("/$ext/",basename($filename)))
  • 在am.exe中的命令执行时,吊起upload方法时的参数有问题,没有把 -i 参数传进去,导致设置的扩展名过滤都没起作用
  • 我们可以在_sdk_internal/deploy.php中直接读取配置文件如下:
 
  1. $arrConf = parse_ini_file(dirname(dirname(__FILE__))."/sdk.ini",true);
  2. if($arrConf["SETTING"]["file_filter"])
  3.   {
  4. $ignore = explode("|"$arrConf["SETTING"]["file_filter_extname"]);
  5.   }

     注意: 配置文件中写正则表达式需要用双引号,否则解析不出来哦:

 
  1. file_filter_extname="~$|\.bak$|^tags$"
  •   _sdk_internal/core.function.php 中的递归函数VisitFilesByPath写的有问题;递归调用的时候没有把最后一个参数(ext_filter)传进去,自己加上吧
  1. VisitFilesByPath($filename,$files,$with_md5, $ext_filter);

给sae的sdk找这错误,以后千万不要做这种事情了,好恶心!!!!!!!!
主要是我自己在用,如果不是感觉用着恶心,我才懒得看呢。。。。

关于Apache的内容协商(2)

Apache可以协商的内容基本有四类:

  1. 文档类型: content-type, 通过accept来说明
  2. 语言: language, 通过accept-language来说明
  3. 字符集: charset, 通过accept-charset来说明
  4. 编码: encoding, 通过accept-encoding来说明; (注意是传输过程的编码,不是字符的编码)

相关源码参考:
modules/mappers/mod_negotiation.c

  1. typedef struct {
  2.     apr_pool_t *pool;
  3.     request_rec *r;
  4.     neg_dir_config *conf;
  5.     char *dir_name;
  6.     int accept_q;               /* 1 if an Accept item has a q= param */
  7.     float default_lang_quality; /* fiddle lang q for variants with no lang */
  8.     /* the array pointers below are NULL if the corresponding accept
  9.      * headers are not present
  10.      */
  11.     apr_array_header_t *accepts;            /* accept_recs */
  12.     apr_array_header_t *accept_encodings;   /* accept_recs */
  13.     apr_array_header_t *accept_charsets;    /* accept_recs */
  14.     apr_array_header_t *accept_langs;       /* accept_recs */
  15.     apr_array_header_t *avail_vars;         /* available variants */
  16.     int count_multiviews_variants;    /* number of variants found on disk */
  17.     int is_transparent;       /* 1 if this resource is trans. negotiable */
  18.     int dont_fiddle_headers;  /* 1 if we may not fiddle with accept hdrs */
  19.     int ua_supports_trans;    /* 1 if ua supports trans negotiation */
  20.     int send_alternates;      /* 1 if we want to send an Alternates header */
  21.     int may_choose;           /* 1 if we may choose a variant for the client */
  22.     int use_rvsa;             /* 1 if we must use RVSA/1.0 negotiation algo */
  23. } negotiation_state;

对于协商的表达方式都是一样的,如:

Accept: */*
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7

其中“,”和“;”的分隔或许不太好明白其含义,其实,其格式是这样的:
name;q=N;charset=TEXT
如果要表达多组,则用“,”分隔;如:
name;q=N;charset=TEXT,name;q=N;charset=TEXT

其中,q、charset都是可以省略的,如:
Accept: */*
只有一组说明,而且是省略了q和charset

相关源码参考:
modules/mappers/mod_negotiation.c

  1. typedef struct accept_rec {
  2.     char *name;                 /* MUST be lowercase */
  3.     float quality;
  4.     float level;
  5.     char *charset;              /* for content-type only */
  6. } accept_rec;

关于文档类型的协商依赖的是: docs/conf/mime.types
如:
文档类型                     资源扩展名
text/html                   html htm
text/css                    css
text/plain                  txt text conf def list log in  

关于语言和字符集的协商依赖的是: docs/conf/charset.conv
如:
# Lang-abbv Charset     Language
#———————————
en          ISO-8859-1  English
UTF-8       utf8        UTF-8  
Unicode     ucs         Unicode
th          Cp874       Thai    
ja          SJIS        Japanese
ko          Cp949       Korean  
zh          Cp950       Chinese-Traditional
zh-cn       GB2312      Chinese-Simplified
zh-tw       Cp950       Chinese
。。。

其中,第一列是语言的缩写,协商时一般用缩写; 第二列是字符集

—————————
内容可能是根据多个条件来协商的,那么对于一个协商的资源可能涉及到多个扩展名的,如:
content.en.html.gz
该资源如果写成了:
content.html.en.gz
也是可以找到的,只是在做超链接的时候,如果写成了: content.gz.html.en 就找不到了
参考: http://httpd.apache.org/docs/2.2/content-negotiation.html#naming

关于内容协商与cache
对于http1.0来讲,经过协商的内容是不建议cache的;在http1.1中添加了vary的http头,用来告知客户端内容是根据哪些条件来协商的,这样客户端可以尽可能的利用cache,如果协商条件不变的话就可以使用cache的。

====================
参考资料:

http://httpd.apache.org/docs/2.2/content-negotiation.html
http://httpd.apache.org/docs/2.2/mod/mod_negotiation.html