2013-09-09

小数据与大数据

Views: 12333 | Add Comments

计算机编程领域有个公式:"程序 = 算法 + 数据结构", 其实, 换个角度看, 那不就是:"软件 = 逻辑 + 存储"吗? 今天就谈谈存储(数据)对于软件设计的影响.

很多偏业务应用型软件, 在数据规模非常小的时候(例如 100M 之于 8G 的内存, 10G 之于 1T 的硬盘), 怎么做都不会是问题, 只要逻辑正确, 程序一启动, 立马就顺利地提供服务. 比如开发一个日活跃 1000 人的论坛, 随便找到虚拟主机, 用 PHP + MySQL 就出来了, 成本低廉性能稳定.

但是, 如果想要做出一个像百度贴吧那么样规模庞大的系统, 就不是原来的 PHP + MySQL 方案简单扩展就可以了的. 因为, 它的数据规模已经达到了非常大的程度, 导致问题的复杂度几个数量级.

以前, 我们在设计一个站内信系统时, 使用了内存数据库 Redis 作为存储方案. 当时感觉 Redis 虽然把数据全部放在内存中, 但我们还是能轻松提供 10G 内存空间的服务器的, 而且随着硬件的升级, 系统应该还是可以随着时间扩展的(没错, 我们觉得系统可以被动地扩展).

然而, 当初的设计容量支撑了不到半年, 我们必须频繁清理数据, 开始数据可以保留三个月, 然后是一个月, 再就是二十天... 两年过去了, 我们的服务器硬件几乎没有升级, 勉强给 Redis 分配了 30G 的存储空间. 相比来说, 我们的业务规模可不是按摩尔定律来扩大的, 业务的扩展速度是一年 10 倍, 甚至是 100 倍!

这个例子说明:

1. 摩尔定律不适用于软件进化
2. 软件系统的成长, 应该采用指数曲线, 而不是线性曲线
3. 软件应该不断地进化, 许多软件系统两三年要完全重构一次

软件的升级, 一方面主动升级来迎合业务的变更, 另一方面被动地升级来满足数据规模的扩大.

有人曾经说过, 中国有 13 亿人, 不管多么小的问题, 只要乘以 13 亿, 那就成为一个很大很大的问题了. 一个 10 亿用户的系统, 不管多少简单的功能, 即使每人只敲入一个字母, 只要乘以 10 亿, 那就是 1G 的存储空间需求.

Related posts:

  1. 在线状态服务在网站系统中的应用
  2. SSDB在大数据量日志分析中的应用案例
  3. 基于Redis构建系统的经验和教训
  4. 我所理解的分布式系统
  5. Redis 的作者狂喷某 NoSQL 数据库
Posted by ideawu at 2013-09-09 22:24:59

Leave a Comment