网站建设-合理选择数据库(三)
在上一篇《网站建设 - 合理选择数据库》的文章中,我们已经介绍了基于文件系统和NoSql的存储方式以及应用场景。现在我想介绍另外一种在大型网站建设中会使用到的分布式的数据存储方法 – MapReduce,该方法以及在大型网站建设项目中被成熟使用。
简而言之,mapreduce模型具有两个部分,即map和reduce。Map的输入是一个键值对,生成一个中间键值对。输入的键可能是一个文档名或者是指向文档某一段的指针。值可能是文档的完整字符串。Map的输出将是到reduce的输入,改模块使用一定的算法对文档进行分片,并且把结果添加到一个列表中。这是个不算复杂的程序,根据键对数据进行排序和分片。这种技术最大的好处是将非常大的数据集计算分发到多台服务器中进行分布式计算。
Apache的Hadoop就是采用mapreduce和Google File System(GFS)组合的一个例子。它同时采用了mapreduce技术和GFS,hadoop既是具有高可扩展性的文件系统,又能够分布式计算,存储和获取数据。在一些专注于大型系统的深圳网站建设公司中已经被使用过。
Mapreduce结构示例图
我们已经介绍了这么多网站建设中替代传统关系型数据库的存储方案,那么该如何决定采用哪种方案呢,应该考虑数据的那些特征呢?与存储的方法有很多选择一样,需要的考虑的数据特征也很多。最重要的几个是数据元素之间的关联程度,解决方案的发展速度以及数据的读写比例。最后,我们关心的是如何把数据变现,因为我们不想让自己的系统成本超出收益。
数据之间的关联程度非常重要,因为它关系到解决方案的灵活性,成本和网站建设开发周期。例如,假设把一个涉及用户,付款,采购等信息的事务存储在一个键值存储中,然后采购报告内体现其中的信息片段,想象一下有多么困难吧。虽然你可以采用文件系统或者NoSql存储的方法实现它,但向用户交付结果需要的开发投入和时间成本都很高。
预期的增长的速度非常重要,原因很多。最终,这个增长速度会影响系统的成本和客户响应时间。如果数据实体之间需要高度的联系,那么我们可能需要利用所有的硬件和处理能力来支持单一的整合数据库,促使我们把数据库拆分成多个实例。
读写比例也非常重要,因为它有助于我们理解需要什么样的系统。只写一次而读多次的数据可以采用文件系统外加某种应用,文件或对象缓存。图像就是采用文件系统进行存储的典型例子。写过之后需要更新的数据,或者具有很高读写比例的数据,最好采用NoSql存储或RDBMS。
如果数据间的关系不是很多,那么在任何水平的读写冲突和几乎任何水平的增长速度下,都可以使用NoSql存储技术,因为采用NoSql技术的成本较低。最好,如果数据关系不多,不关心读写冲突,那么可以采用成本更低的文件系统。
总结:我们已经介绍了三种在大型网站建设项目中可能适用的数据库系统,分别是NoSql,文件系统和基于分布式计算的MapReduce。无论我们决定采用哪种方式之前,都必须清楚地连接应用需求和场景,因为每种存储方式都有各自的优缺点和适应的专用场景,只有在正确的场景中使用了正确的方案,才能将网站建设项目的周期,成本,可扩展性和性能最大化。