浏览模式: 标准 | 列表 全部文章

八种不同的NoSql对比

14

虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破。这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举。

  但是NoSQL数据库之间的不同,远超过两 SQL数据库之间的差别。这意味着软件架构师更应该在项目开始时就选择好一个适合的 NoSQL数据库。针对这种情况,这里对 CassandraMongodbCouchDBRedis、 Riak、 MembaseNeo4jHBase进行了比较:

  (编注1:NoSQL:是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储。现今的计算机体系结构在数据存储方面要求具 备庞大的水平扩 展性,而NoSQL致力于改变这一现状。目前Google的 BigTable 和Amazon 的Dynamo使用的就是NoSQL型数据库。 参见NoSQL词条。)


  1. CouchDB
所用语言: Erlang特点:DB一致性,易于使用使用许可: Apache协议: HTTP/REST双向数据复制,持续进行或临时处理,处理时带冲突检查,因此,采用的是master-master复制(见编注2)MVCC - 写操作不阻塞读操作可保存文件之前的版本Crash-only(可靠的)设计需要不时地进行数据压缩视图:嵌入式 映射/减少格式化视图:列表显示支持进行服务器端文档验证支持认证根据变化实时更新支持附件处理因此, CouchApps(独立的 js应用程序)需要 jQuery程序库
  最佳应用场景:适用于数据变化较少,执行预定义查询,进行数据统计的应用程序。适用于需要提供数据版本支持的应用程序。

  例如: CRM、CMS系统。 master-master复制对于多站点部署是非常有用的。

  (编注2:master-master复制:是一种数据库同步方法,允许数据在一组计算机之间共享数据,并且可以通过小组中任意成员在组内进行数据更新。)


  2. Redis
所用语言:C/C++特点:运行异常快使用许可: BSD协议:类 Telnet有硬盘存储支持的内存数据库,但自2.0版本以后可以将数据交换到硬盘(注意, 2.4以后版本不支持该特性!)Master-slave复制(见编注3)虽然采用简单数据或以键值索引的哈希表,但也支持复杂操作,例如 ZREVRANGEBYSCORE。INCR & co (适合计算极限值或统计数据)支持 sets(同时也支持 union/diff/inter)支持列表(同时也支持队列;阻塞式 pop操作)支持哈希表(带有多个域的对象)支持排序 sets(高得分表,适用于范围查询)Redis支持事务支持将数据设置成过期数据(类似快速缓冲区设计)Pub/Sub允许用户实现消息机制
  最佳应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。

  例如:股票价格、数据分析、实时数据搜集、实时通讯。

  (编注3:Master-slave复制:如果同一时刻只有一台服务器处理所有的复制请求,这被称为 Master-slave复制,通常应用在需要提供高可用性的服务器集群。)


  3. MongoDB
所用语言:C++特点:保留了SQL一些友好的特性(查询,索引)。使用许可: AGPL(发起者: Apache)协议: Custom, binary( BSON)Master/slave复制(支持自动错误恢复,使用 sets 复制)内建分片机制支持 javascript表达式查询可在服务器端执行任意的 javascript函数update-in-place支持比CouchDB更好在数据存储时采用内存到文件映射对性能的关注超过对功能的要求建议最好打开日志功能(参数 --journal)在32位操作系统上,数据库大小限制在约2.5Gb空数据库大约占 192Mb采用 GridFS存储大数据或元数据(不是真正的文件系统)
  最佳应用场景:适用于需要动态查询支持;需要使用索引而不是 map/reduce功能;需要对大数据库有性能要求;需要使用 CouchDB但因为数据改变太频繁而占满内存的应用程序。

  例如:你本打算采用 MySQL或 PostgreSQL,但因为它们本身自带的预定义栏让你望而却步。



  4. Riak
所用语言:Erlang和C,以及一些Javascript特点:具备容错能力使用许可: Apache协议: HTTP/REST或者 custom binary可调节的分发及复制(N, R, W)用 JavaScript or Erlang在操作前或操作后进行验证和安全支持。使用JavaScript或Erlang进行 Map/reduce连接及连接遍历:可作为图形数据库使用索引:输入元数据进行搜索(1.0版本即将支持)大数据对象支持( Luwak)提供“开源”和“企业”两个版本全文本搜索,索引,通过 Riak搜索服务器查询( beta版)支持Masterless多站点复制及商业许可的 SNMP监控
  最佳应用场景:适用于想使用类似 Cassandra(类似Dynamo)数据库但无法处理 bloat及复杂性的情况。适用于你打算做多站点复制,但又需要对单个站点的扩展性,可用性及出错处理有要求的情况。

  例如:销售数据搜集,工厂控制系统;对宕机时间有严格要求;可以作为易于更新的 web服务器使用。



  5. Membase
所用语言: Erlang和C特点:兼容 Memcache,但同时兼具持久化和支持集群使用许可: Apache 2.0协议:分布式缓存及扩展非常快速(200k+/秒),通过键值索引数据可持久化存储到硬盘所有节点都是唯一的( master-master复制)在内存中同样支持类似分布式缓存的缓存单元写数据时通过去除重复数据来减少 IO提供非常好的集群管理 web界面更新软件时软无需停止数据库服务支持连接池和多路复用的连接代理
  最佳应用场景:适用于需要低延迟数据访问,高并发支持以及高可用性的应用程序

  例如:低延迟数据访问比如以广告为目标的应用,高并发的 web 应用比如网络游戏(例如 Zynga)



  6. Neo4j

所用语言: Java特点:基于关系的图形数据库使用许可: GPL,其中一些特性使用 AGPL/商业许可协议: HTTP/REST(或嵌入在 Java中)可独立使用或嵌入到 Java应用程序图形的节点和边都可以带有元数据很好的自带web管理功能使用多种算法支持路径搜索使用键值和关系进行索引为读操作进行优化支持事务(用 Java api)使用 Gremlin图形遍历语言支持 Groovy脚本支持在线备份,高级监控及高可靠性支持使用 AGPL/商业许可
  最佳应用场景:适用于图形一类数据。这是 Neo4j与其他nosql数据库的最显著区别

  例如:社会关系,公共交通网络,地图及网络拓谱


  7. Cassandra

所用语言: Java特点:对大型表格和 Dynamo支持得最好使用许可: Apache协议: Custom, binary (节约型)可调节的分发及复制(N, R, W)支持以某个范围的键值通过列查询类似大表格的功能:列,某个特性的列集合写操作比读操作更快基于 Apache分布式平台尽可能地 Map/reduce我承认对 Cassandra有偏见,一部分是因为它本身的臃肿和复杂性,也因为 Java的问题(配置,出现异常,等等)
  最佳应用场景:当使用写操作多过读操作(记录日志)如果每个系统组建都必须用 Java编写(没有人因为选用 Apache的软件被解雇)

  例如:银行业,金融业(虽然对于金融交易不是必须的,但这些产业对数据库的要求会比它们更大)写比读更快,所以一个自然的特性就是实时数据分析



  8. HBase

  (配合 ghshephard使用)
所用语言: Java特点:支持数十亿行X上百万列使用许可: Apache协议:HTTP/REST (支持 Thrift,见编注4)在 BigTable之后建模采用分布式架构 Map/reduce对实时查询进行优化高性能 Thrift网关通过在server端扫描及过滤实现对查询操作预判支持 XML, Protobuf, 和binary的HTTPCascading, hive, and pig source and sink modules基于 Jruby( JIRB)的shell对配置改变和较小的升级都会重新回滚不会出现单点故障堪比MySQL的随机访问性能  最佳应用场景:适用于偏好BigTable:)并且需要对大数据进行随机、实时访问的场合。

  例如: Facebook消息数据库(更多通用的用例即将出现)

  编注4:Thrift 是一种接口定义语言,为多种其他语言提供定义和创建服务,由Facebook开发并开源

10 个加速 CSS 开发的框架

06

CSS 可以做很多事情,但开发者更习惯的是变量、常量和一般的更快速的语法,而 CSS 本身是不支持的。本文介绍了 10 个 CSS 预处理器,让 CSS 支持一些简单的编程语法。

Compass

 

大小: 71.33 K
尺寸: 448 x 241
浏览: 83 次
点击打开新窗口浏览全图

 

Compass 是一个开源的 CSS 制作框架。

 

CSS Cacheer

这是一个很棒的 CSS 预处理器,让开发者可以制作插件,要求 PHP 以及 Apache (mod_deflate 和 mod_rewrite)

 

CSScaffold

scaffold

CSScaffold是一款帮助CSS开发者快速进行开发的框架,使用PHP编写而成- Simple, but powerful !

不同于许多CSS框架,它必须依靠PHP与Apache的mod_rewrite来执行,但也因为需要这两种东西,让CSScaffold变得很神奇、很方便,写起CSS来又快又轻松!

 

Sass

Sass 扩展了 CSS3,增加了规则、变量、混入、选择器、继承等等特性。Sass 生成良好格式化的 CSS 代码,易于组织和维护。

 

Less CSS

Less CSS 是一个使用广泛的 CSS 预处理器,通过简单的语法和变量对 CSS 进行扩展,可减少很多 CSS 的代码量。

 

Turbine

这是 PHP 爱好者的框架,提供最小化的语法、自动的 gzip 压缩以及多css文件的合并,修复跨浏览器支持问题等。

 

Switch CSS

Switch 是一个全功能的稳定的 CSS 预处理器,基于 Apache 和 mod_python 下运行,也提供命令行处理工具。

 

CSS Preprocessor

CSS Preprocessor 采用 PHP5 编写,有预处理器的常见功能,外,支持 CSS 表达式,如:margin-left: (200px * 3/2 – 10px);

 

DT CSS

DtCSS 是一个 PHP 脚本,用来对 CSS 文件进行预处理。DtCSS 可通过扩展 CSS 的特性来加速 CSS 编码。例如嵌套选择器、颜色混合等等。DtCSS 读取 CSS 文件并对特殊语法进行处理,然后输出标准 CSS。DtCSS 包含一个智能的缓存系统。

 

CSS PP

目前还是 alpha 版本状态,支持 PHP、Python 和 Ruby。

历史回顾:Google的十大高价收购

19

在风云变幻的科技行业,公司间的收购与被收购是常有的事。过去10年间,Google已经收购了超过100家的公司。是不是好奇哪些公司被Google花费巨资招为旗下呢?下面将回顾历史,看看Google的十大高价收购。

1.dMarc Broadcasting

时间:2006年1月 金额:1.02亿美元
说明:为加强自动广告系统上的实力,Google收购了该领域的公司dMarc Broadcasting。原dMarc Broadcasting公司的技术和产品都被整合到了现在的Google AdSense中。

2.On2 Technologies

时间:2010年10月 金额:1.33亿美元
说明:为了优化WebM使之成为未来互联网的主流视频格式,Google经过投标后将这家从事多媒体编解码器开发的公司拿下。

3.Slide

时间:2010年8月 金额:1.82亿美元
说明:Slide是一个相册分享的Web2.0网站,在被收购之前是Facebook上最大的第三方应用开发者。Google对Slide的收购被解读为“Google对社交网络的重视”。

4.Admeld

时间:2011年6月 金额:4亿美元
说明:这又是一家在线广告领域内的公司,专注于在线广告的简化展示。现在Admeld与同样被Google收购的Double Click和Invite Media被整合到了一起。

5.Postini

时间:2007年7月 金额:6.25亿美元
说明:这家公司提供云计算和垃圾邮件过滤的技术和服务,Google收购后将其整合进入了Gmail中。

6.ITA Software

时间:2010年7月 金额:7亿美元
说明:为优化搜索结果中的旅游和机票优惠信息,Google将开发旅游业软件的ITA招入麾下。

7.AdMob

时间:2009年11月 金额:7.5亿美元
说明:为提升移动广告市场的实力,Google收购了该领域内的AdMob。

8.YouTube

时间:2006年10月 金额:16.5亿美元
说明:Google是通过换股并购的方式拿下这家世界最大的视频网站的。Google并没有把它和Google视频整合到一起,继续保持独立运营。

9.Double Click

时间:2007年4月 金额:31亿美元
说明:这家曾经的最大的广告服务提供商和现在YouTube一样仍保持独立运营,为Google AdSense提供技术支持。

10.Motorola移动

时间:2011年8月 金额:125亿美元
说明:昨日的惊天收购震惊了整个IT业,必将改变现在的智能手机市场的格局。摩托罗拉移动是Android手持设备的39个生产商之一。在拥有了自己的硬件生产商之后,Google将加强对整个Android生态系统的掌控。

via Mashable

更早的Google收购信息可以点此查看。

TAGS: google

编程巨星的唯一秘诀

09

别以为是那些软件开发定律,别以为是开发出那些特殊用途的软件,别以为是软件设计技术本身。只有一条真理决定了一个软件程序员的成功还是失败。由于坚持这个真理,一个资深的程序员能在一天的时间里学会一门新的编程语言,而由于不坚持这条真理,一个初级的程序员用十年时间也只能挣到一份糊口的钱、永远是来实现别人的设计、永远不够优秀而得不到晋升的机会。这条真理让你看清了差的程序员和好的程序员的不同之处,好的程序员和伟大的程序员的不同之处,伟大的程序员和能通过自己的技术创造出一个亿万美元价值的程序帝国的超级程序员的不同之处。

不是什么复杂的道理,不是什么难懂的理论。不是具有什么天赋或“编程超能力“才能做到的事情。最终成为的是一个优秀的程序员还是一个很烂的程序员,这跟你的出身一点关系都没有。

而真正的原因只有一个,唯一的一个:

对所做的事情的理解越深,你就会做的越好。

 

超级程序员跟那些平庸的、一般的程序员比起来,对自己要做的事情的理解要深的多的多。这就是原因。

要想成为一名出色的程序员,你所要做的就是完全的理解要在做的事情。

有人会说,该知道的我都知道了。而对说这话的人的验证就是看他们能有应用他们知道的知识的能力。是否他能够构造出完美的系统架构,让人们能轻松的维护?是否他能在不皱眉头的情况下把一个普通程序员毫无可能解决的问题轻松解决掉?是否他能在被询问时能用最简单的概念把任何问题都阐述明白?如果能够,那他就是一个杰出的程序员,他能很好的理解了他在做的事情。

然而,尽管这些人看起来已经“无所不知”,很多的程序员(包括我)都感觉他们仍然在知识的海洋里奋斗不已。有如此多的东西需要去学习,一个人几乎要花费他毕生的心力去学习,但仍然很难说能掌握计算机知识的90%。

而这场持久战中的秘密武器、战胜计算机知识的亚瑟王的神剑,就是透彻理解。对你的领域里的基础知识理解的越好,你就越容易提升到更高的层次。你对这一层次的知识理解的越好,你就更容易掌握下一层次,以此类推。一旦你从最简单最基础的知识走到最高级最复杂的理论,你可以从头再过一遍,此时你会惊奇的发现,在最低最底的底层,竟然还有那么多知识需要学习。

看起来这个道理实在是太简单,难以受到重视,但事实就是这样。通往杰出的程序员的道路就是完全的深入的理解,从掌握精通最基本的知识开始,从而逐渐牢固掌握更高级的知识。

我不想骗你—这是一个很长的路程。但你是值得去做的。在路的尽头,你会突然发现,自己神奇的成为了一位资深的程序员,受到所有人的尊敬。你能成为一位神奇的程序员,任何事情都难不倒的程序员,让其他程序员都羡慕的程序员。谁能预料到呢?我不能告诉你你该做什么或能成为什么。但我可以告诉你我发现一些真实的道理和有价值的东西。怎么去做全在于自己。

http://www.aqee.net/the-singular-secret-of-the-rockstar-programmer/

PHP filter_var() 函数 Filter 函数

18

ilter_var() 函数通过指定的过滤器过滤变量。

如果成功,则返回已过滤的数据,如果失败,则返回 false。

语法

filter_var(variable, filter, options)

variable:必需。规定要过滤的变量。 
filter:可选。规定要使用的过滤器的 ID。 (参见下面的FiltersID列表)
options:规定包含标志/选项的数组。检查每个过滤器可能的标志和选项。 

 

<?
@header('content-type:text/html;charset=utf-8;');
$email_a='jcifox@gmail.com';
$email_b='@jcifox@gmail.com';
$email_c='jcifoxgmail.com';
$ip_a='0.0.0.0';
$ip_b='255.255.255.255';
$ip_c='0.0.0.265';
echo $email_a.' : ';
echo (filter_var($email_a,FILTER_VALIDATE_EMAIL))?'is valid':'is not valid';
echo '<br /><br />';
echo $email_b.' : ';
echo (filter_var($email_b,FILTER_VALIDATE_EMAIL))?'is valid':'is not valid';
echo '<br /><br />';
echo $email_c.' : ';
echo (filter_var($email_c,FILTER_VALIDATE_EMAIL))?'is valid':'is not valid';
echo '<br /><br />';
echo $ip_a.' : ';
echo (filter_var($ip_a,FILTER_VALIDATE_IP))?'is valid':'is not valid';
echo '<br /><br />';
echo $ip_b.' : ';
echo (filter_var($ip_b,FILTER_VALIDATE_IP))?'is valid':'is not valid';
echo '<br /><br />';
echo $ip_c.' : ';
echo (filter_var($ip_c,FILTER_VALIDATE_IP))?'is valid':'is not valid';
?>

 

FiltersID名称:描述

FILTER_CALLBACK:调用用户自定义函数来过滤数据。

FILTER_SANITIZE_STRING:去除标签,去除或编码特殊字符。

FILTER_SANITIZE_STRIPPED:"string" 过滤器的别名。

FILTER_SANITIZE_ENCODED:URL-encode 字符串,去除或编码特殊字符。

FILTER_SANITIZE_SPECIAL_CHARS:HTML 转义字符 '"<>& 以及 ASCII 值小于 32 的字符。

FILTER_SANITIZE_EMAIL:删除所有字符,除了字母、数字以及 !#$%&'*+-/=?^_`{|}~@.[]

FILTER_SANITIZE_URL:删除所有字符,除了字母、数字以及 $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=

FILTER_SANITIZE_NUMBER_INT:删除所有字符,除了数字和 +-

FILTER_SANITIZE_NUMBER_FLOAT:删除所有字符,除了数字、+- 以及 .,eE。

FILTER_SANITIZE_MAGIC_QUOTES:应用 addslashes()。

FILTER_UNSAFE_RAW:不进行任何过滤,去除或编码特殊字符。

FILTER_VALIDATE_INT:在指定的范围以整数验证值。

FILTER_VALIDATE_BOOLEAN:如果是 "1", "true", "on" 以及 "yes",则返回 true,如果是 "0", "false", "off", "no" 以及 "",则返回 false。否则返回 NULL。

FILTER_VALIDATE_FLOAT:以浮点数验证值。

FILTER_VALIDATE_REGEXP:根据 regexp,兼容 Perl 的正则表达式来验证值。

FILTER_VALIDATE_URL:把值作为 URL 来验证。

FILTER_VALIDATE_EMAIL:把值作为 e-mail 来验证。

FILTER_VALIDATE_IP:把值作为 IP 地址来验证。

TAGS: php

rc4加密算法

29

TAGS: php

Records:38812345678910»