Submitted by gouki on 2009, December 10, 12:35 PM
正如本文的最后一句话:对于数据量不大的站点,首选如何利用好 Cache 吧,分片只是手段,不是目的。事实上,如果不是涉及到每天上万的交易量,Cache才是更好的处理方案。当然象文中回答的对象来自腾讯,那当然,对于拍拍网、Q币等交易,几乎每天都是过万的交易量,这时候他们才会考虑使用所谓的数据分片。不过,了解一下这种技术或者说是手段,出去IB一下的时候也可以吹吹啊。。
原文来自:http://www.dbanotes.net/database/sharding.html,全文如下【未作删节】:
作者: Fenng
Question: 假设一家 C2C 网站,数据库中某表存储买卖双方交易的数据信息,对于一条交易来说,买卖双方数据具有一定程度的耦合性,比如卖家的状态更新对应买家的状态也会更新,对于 一个中大规模的电子商务网站,架构师在设计中如何考虑数据分片的问题(假定该表随着数据的膨胀必须拆分)?
Answer:对于一个中大规模的电子商务网站,随着网站的不断发展,其相应的数据规模会不断膨胀。数据分片技术是使网站得于实现可扩展性的一种常用解决方案。对于 C2C 类型的网站,由于交易记录不容易进行水平的数据分割,因此对于这样的应用处理要再进行细分:
- 买卖双方交易的信息,具备较高的时效性,即交易全部完成后就不会再有更新,因此这部分数据可以与正在交易中的数据区分开来,并可以单独分 表,定时归纳。具体的做法可以采用水平分割的数据分片技术,比如可以根据用户号码段范围进行切片,把不同的群体划分到不同的 DB 上,这样可以很好的进行横向水平扩展(Scale Out)。它可以很好的突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。
- 对于正在交易中的数据,主要根据时间进行分表。如果分的更细,则可以分三个表,但是这样在事务保证方面则要复杂很多,不建议这样做。
这个问答是《程序员》杂志架构师接龙栏目的第一期的内容。提问者是我,回答者是腾讯研发总监王速瑜先 生。其实我抛出问题后当时还真不知道接龙的是哪位,只是知道会是百度或是腾讯的朋友来回答,当然我也对这两家的数据处理方式都是比较感兴趣的。最后刊登的 内容或许让很多人觉得不过瘾 -- 如果能更详细一点就好了(毕竟还有其他问题呢)。不过能够引发思考就好,这也是这个栏目的初衷吧。
对这个问题或许可以补充的是,切分或许还算是容易的事情,但是切分后用户对数据的查询多少是有点麻烦。一旦要查询历史交易信息,则必须考虑跨多个数 据分片获取数据并排序的问题。交易中的数据与交易完成的数据是否做切分,是有必要根据自己的实际情况仔细衡量。要注意如对交易中的活动数据单独存放的一个 表中,则还是不可避免的要产生 I/O 热点问题,而且,这个表实际上变成了一个数据队列(新的瓶颈)--新生成的交易进来,完成的交易删除或归档。这样产生的双重 I/O 压力不容忽视。
当然,这个问题的前提限制了回答的发挥,其实在设计初期也可以考虑买家信息与卖家信息分别放入不同的表中,然后对这两种属性的表再进行切分,这也是 可选的途径,这样的开销是每笔交易会重复存储一条记录,而记录的变化也要在两个表中更新。对数据的一致性维护有一定的挑战。这似乎是个只带来额外开销的办 法?其实也有益处--索引的设计起码会更简单一些,而用户对交易记录的定制查询也会更加方便。
数据分片(或 Sharding) 现在几乎是每个网站架构师都必须要考虑的基础问题。多数情况下,分片的粒度和方式取决于业务,慢慢地快变成可意会不可言说的话题了,你有什么建议或意见不妨留言说说。
--EOF--
为了避免误导,对于数据量不大的站点,首选如何利用好 Cache 吧,分片只是手段,不是目的。【这句话也是dbanotes.net所提出的。不是我说的,虽然我也是这个想法。。。黑黑】
DataBase | 评论:0
| 阅读:17630
Submitted by gouki on 2009, December 9, 1:02 PM
本来一直在用komodo的,也没有注意过使用netbeans的情况。
但最近使用的时候发现有点小问题,所以就临时先转到netbeans下了。
问题情况是,使用komodo增加一个live folder,但是这个live folder里的class和function都不会被自动提示。。。一下子郁闷了。所以才转为netbeans
netbeans有一个全局包含,很爽的。。当然也可以 项目中包含路径。可惜,包含的文件一直乱码。我已经设置了netbeans的程序语言编码为UTF-8了。。最后没办法 ,只能询问google了。。还好,google是很大方的。他告诉了我一个链接:http://www.java2000.net/p12904,让我了解了解决方法
一直在网上找这个问题的解决方法,可是都是只有Netbenas5.5的解决方案,而且并没有根本的解决,今天上官方看了下,原来官方就有解决方法~哈哈~这招可以解决目前所有的版本,全部文件将用UTF-8解码.所以转移工作平台就更加简单咯~
这是原文:
For those who need to use international and multibyte characters, NetBeans can support UTF-8 editing. To enable it, go to your NetBeans installation directory and find the etc folder. There will be a file there called netbeans.conf.
This file keeps some configuration for NetBeans, including the default command line arguments. These are parameters that will be sent to a new starting Netbeans IDE.
Every argument lives inside a double-quoted variable called netbeans_default_options, and each one is separated from another by a space.
To enable UTF-8 in NetBeans, just place this parameter anywhere on the list of netbeans_default_options:-J-Dfile.encoding=UTF-8
中文解释一下:
1.找到你的Netbeans安装目录下的etc文件夹,如C:\Program Files\NetBeans 6.0 M9\etc
2.用记事本打开netbeans.conf
3.找到netbeans_default_options这一句(没带#号的,带#号的是注释)
4.在最后面加上一个空格,再加入-J-Dfile.encoding=UTF-8
如我现在的设置:
netbeans_default_options="-J-DAM_CONFIG_FILE=\"C:\Sun\AppServer\domains\domain1\config\AMConfig.properties\" -J-Dcom.sun.aas.installRoot=\"C:\Sun\AppServer\" -J-Xms128m -J-Xmx512m -J-XX:PermSize=32m -J-XX:MaxPermSize=160m -J-Dapple.laf.useScreenMenuBar=true -J-XX:+UseConcMarkSweepGC -J-XX:+CMSClassUnloadingEnabled -J-XX:+CMSPermGenSweepingEnabled -J-Dfile.encoding=UTF-8"
这样,打开的文件所有都用UTF-8解码了~哈哈,不再有乱码咯~
--EOF--
文中的意思是看官网才知道的,可惜我不认识英文啊。。不过,幸好解决了。打开netbeans一看,果然不再乱码。。激动了。
附上全局包含的图片,避免有同学误解:
Software | 评论:2
| 阅读:25091
Submitted by gouki on 2009, December 8, 2:17 PM
关注博客园那还是很早时候的事了。从博客园没几个人开始,到现在博客园的访问量超大,我都一直在看着,虽然我是用PHP进行开发,但并不妨碍我学习和关注.net的世界。
我不知道博客园是不是还在用那个什么text-blog【好象是这个,记得好象是开源的?】的系统了。反正博客园的页面是一改再改,当然我现在都是纯RSS订阅的,可能关注的也就少了一点。不过,对于博客园的大访问量,我还是依稀有印象,有一次dudu发博客说被百度的爬虫爬死的。
下面这篇文章是博客园团队关于首页优化的心得:
周末,我们对博客园首页进行了优化,将其中的一些心得与大家分享。
背景图片的优化
博客园首页主导航的背景图片之前存在这样的问题:在IE和Chrome中第一次打开页面时,背景图片加载延迟比较明显,如果刷新页面,背景图片 所在位置会闪一下,即使图片是304状态(在FireFox中未出现这样问题,可能是FireFox加载背景图片的机制不同)。由于导航文字用的是淡灰色 (#EEEEEE),在没有背景图片的白色背景色下看起来很不舒服。
开始我们使用两种优化方法,并没有产生效果。
1. 背景图片的预加载
JavaScript代码
- <script type="text/javascript">
- jQuery.preloadImages = function() {
- for (var i = 0; i < arguments.length; i++) {
- jQuery("<img>").attr("src", arguments[i]);
- }
- }
- var staticImgUrl ="http://static.cnblogs.com/images/";
- $.preloadImages(staticImgUrl + "bg_menu_nav.png");
- </script>
参考文章:了解jQuery技巧来提高你的代码
2. 背景图片的压缩
所用工具:Pngcrush
操作命令:pngcrush -reduce -brute bg_menu_nav.png bg_menu_nav2.png
参考文章:Best Practices for Speeding Up Your Web Site
接着,我们就想不用背景图,但用CSS不能实现背景图中的渐变色(filter只支持IE),于是试着用多个1px高的div拼渐变色效果,也没成功。
后来,我们用了一个欺骗式的方法缓解了这个问题,给导航栏加一个与背景图片最接近的背景色,这样从无背景图片到有背景图片的加载过程中,颜色上的变化不会很大,从我们的体验,感觉还是可以接受的。
HTML代码中的空格、空行处理
使用下面的ASP.NET代码对页面输出进行清理
C#代码
- private static readonly Regex REGEX_LINE_BREAKS = new Regex(@"\n\s*", RegexOptions.Compiled);
- private static readonly Regex REGEX_LINE_SPACE = new Regex(@"\n\s*\r", RegexOptions.Compiled);
- private static readonly Regex REGEX_SPACE = new Regex(@"( )+", RegexOptions.Compiled);
-
- protected override void Render(HtmlTextWriter writer)
- {
- using (HtmlTextWriter htmlwriter = new HtmlTextWriter(new System.IO.StringWriter()))
- {
- base.Render(htmlwriter);
- string html = htmlwriter.InnerWriter.ToString();
- html = REGEX_LINE_BREAKS.Replace(html, string.Empty);
- html = REGEX_LINE_SPACE.Replace(html, string.Empty);
- html = REGEX_SPACE.Replace(html, " ");
- writer.Write(html.Trim());
- }
- }
更进一步的需要清理回车换行符。
js文件压缩
工具:JSMin
命令:jsmin <site.src.js >site.js
CSS命名缩短
抱着省一个字节是一个字节的原则,将CSS的class命名缩短。
部分内容采用脚本加载
比如网站二级分类,改为jQuery调用WebService加载,不仅减小了页面大小,而且减小了服务器端显示首页时的处理负担。
小结
这次的首页优化,从我们的使用体验上看效果是比较明显的,当然首页的优化还有很大的空间,我们会继续优化。
如果您对博客园首页优化有什么建议,期待您的分享!
原文地址:http://www.cnblogs.com/cmt/archive/2009/12/07/1618301.html
不过看样子,这样的优化效果应该不会太明显,主要还是由于大部分作者在发布博客的时候,都不使用摘要,所以,对于页面的压缩其实并没有起到什么作用。。【强制截取摘要,或许还是有点作用的吧?否则几十篇上万字的文章贴在首页,怎么着也快不了】
Misc | 评论:0
| 阅读:16202
Submitted by gouki on 2009, December 7, 3:27 PM
由于自己更改了thinksns的部分核心内容,不得己,先记录下来,如果以后被thinksns官方所更改,那么,我就从其中去掉,否则。。。每次TS一更新,我都要重新更新这些地方
1、关于Ucenter的整合【主要是添加了API等,还有就是用户登录和退出那块,暂时不更换】
2、修改了/thinkphp/api/Model/AttachLWModel.class.php的upload方法【约 line:69】,在foreach($uploadinfo as $u)这个循环中,添加了
PHP代码
- $map['key'] = $u['key'];
主要原因是,这个api只能针对页面中的FILE上传表单处理,而且,都是同名字段的表单,这对我来说有点不方便,比如我的表单里有<input type="ffile" name="a"><input type="file" name="b">,这个API就不能工作,所以添加了这个变量处理: $u['key']这个键值在thinkPHP的upload里是存在的,所以直接添加就可以了。
而且这个变量的赋值,相信在以后的thinksns上传附件有多个不同字段的时候,应该是会用得到的。。。
Tags: thinksns, upload
PHP | 评论:0
| 阅读:16509
Submitted by gouki on 2009, December 7, 11:11 AM
上周五,传闻新网的DNS服务解析出问题,很多人的网站都不能访问,包括我访问我们公司的网站。
后来,换上了OPENDNS,再后来在群里面知道了一些google的DNS,8.8.8.8,和8.8.4.4,结果今天一看张宴的网页,才发现,原来还有这些多的DNS服务器啊。。
---以下内容来自张宴的博客
Google 推出了公共的 DNS 解析服务器(Google Public DNS),可以用来代替 OpenDNS。Google承诺将严格遵循DNS协议,即不阻挡、不劫持和不过滤用户查询。Google Public DNS服务器IP非常好记,过目难忘:
引用
8.8.8.8 google-public-dns-a.google.com
8.8.4.4 google-public-dns-b.google.com
当然,短IP的DNS服务器还有以下这些:
引用
4.3.2.1
4.2.2.1
4.2.2.2
4.2.2.3
4.2.2.4
4.2.2.5
4.2.2.6
---原文地址:http://blog.s135.com/google_public_dns/
估计好记一点的,也就上面的8.8.8.8,和4.3.2.1了。。
真不错,不过。再怎么样也没用,如果你的客户不知道这些DNS,那商业网站再健康也没用啊。。。
Misc | 评论:0
| 阅读:16812