与计算密集型系统相反,现在很多应用是数据密集型。对于这种应用,原始的CPU性能已经几乎不是限制因素了,更大的问题是数据量,数据复杂性和数据变更的速率。
数据密集型应用通常由标准勾践提供常用的功能。例如,许多应用需要:
- 存储数据以供自己活其他应用未来可以查询(数据库)
- 记住高代价操作的结果,为了加速读取(缓存)
- 允许用户使用不同的方式通过关键词查询或过滤数据(搜索索引)
- 向其他进程发送消息,执行异步操作(流处理)
- 定时处理大量的累积数据(批处理)
如果这些听起来很明显,是因为这些数据系统就是这样成功的抽象概念:我们不需要考虑太多就能一直使用它们。当构建一个应用时,大多数工程师不会想去写一个新的数据存储引擎,因为数据库是一个完美的工具。
但是现实没有那么简单。数据库有很多种,我们需要搞清楚哪种工具或方式是最适合的。而且不同的工具很难合并使用。