http://my.oschina.net/chenzuoping/blog/37747
sharding恶梦
国内的很多大型的网站应该都有过sharding的经验。sharding貌似是使用mysql的网站进行性能升级的最重要的手段。 weibo.com,youku.com,douban.com,这此网站都是用sharding作为其性能升级的手段。sharding看起来不错,而 且从weibo youku douban的用户体验来说sharding确实给发挥了作用。
sharding一般都是通过把一个数据集非常巨大的表,按主键切割成多个数据表,甚至是把一个数据库分割成多个数据库。这样数据的读写压力就分散到了多个表或多台机器上,这样性能自然而然的会提高了。
虽然sharding带来了性能的重大提升,但其带来的问题也十分明显 。程序逻辑会改变,会带来程序编写上的困难。一个表被sharding成多个子表后,程序要确定到哪个子表找数据。当要进行多表连接查询时,这几乎成了一 个不可完成的任务,因为要连接的子表可能会在另一台机器上。解决的办法是编写一个专门的数据访问层,但随着一次又一次的sharding,数据访问层本身 也变得十分复杂。sharding本身也非常的复杂,做sharding操作的时候要考虑很多问题,要保证Sharding后业务需要的数据操作依然能够 完成,不正确的sharding会给系统带来灾难性的后果,因为其复杂性,所以很容易导致意料不到的错误出现。
新思路
mysql在sharding中出现的问题也使得业界寻找新更好解决方案。google和amazon分别给出了他们的解决方案,分别是 bigtable,和dynamo。bigtable和dynamo有很多区别,但其有一个重要的共同点是它们两者都放弃了关系模型,由上面的分析可以看 出关系模型在海量数据的情形下会出现扩展困难的问题。
它们都采用了一种实体(entity)[1]模型,实体可以理解为一组相互关联的属性的集合,或一个可以任意添加属性但却没有方法的对象。实体的作 用在于把紧密相关系的数据连接在一起,同时区隔开不相关联的数据。实体是最小的分割单位,当数据量变大时数据会被分割到不同的机器上,不同的实体可能会被 分割到不同的机器上,但同一个实体的不同属性必须保存在同一个机器上。
例如可以把一个用户a建模成一个实体,而人的名字(name)、年纪(age)、身高(height)、体重(weight)等一系列信息都可以表 示成该实体的属性。如果a写了一篇文章则可以该文章仍然应该表示成该实体的一个属性(article1),因为该文章是a写的,因此article1和a 之间紧密相联,如果它写了第二篇文章则新建一个article2的属性,如果a发布了一张照片,则该照片也要用a的一个属性photo1来表示,第二个照 片则用属性photo2来表示。
这样做的好处在于,所有相关联的数据都捆绑在一了起。当用户数量大到一定程度一个服务无法存储所有数据,或一台服务器无法负载海量的数据请求时,则 可以把实体分散到不同的服务器上。因为实体之间几乎是完全不关联的,所以实体被分散到不同的服务器上不会给程序带来太大的影响。
上面的这个模型的优点在于模型非常简单,非常适合于分布式存储。还可以实现自动的sharding,因为sharding的时候根本不需要考虑实体关的关系,只需要以实体为单位将实体分布到不同的机器上即可。
上面这些思考的内容来自于一篇论文life beyond distributed transactions。里面还讲到了消息传递,状态机等问题。非常值得一读。
相关推荐
### 关于云计算的海量数据存储模型 #### 一、引言 随着信息技术的快速发展和数字经济的崛起,企业和个人面临着前所未有的大数据挑战。如何有效地管理和利用这些海量数据成为了关键问题之一。传统的存储解决方案...
【基于Hadoop的海量数据处理模型研究和应用】 在当今信息化社会,Web成为了最大的信息系统,其价值主要来源于用户产生的海量数据。这些数据包含了丰富的信息,包括用户的浏览行为、社交网络互动、购物偏好等,为...
在IT行业中,海量数据处理是一项重要的任务,尤其是在大数据时代,数据量的增长速度远超我们的想象。面对这样的挑战,如何高效地从海量数据中查找特定信息成为了一项关键技术。本篇文章将详细探讨如何解决"海量数据...
通过分析提供的三个文档——“海量数据管理第一次上机.docx”、“海量数据管理第三次上机报告.docx”以及“海量数据管理第2次上机.docx”,我们可以揭示出一系列关于海量数据处理的关键知识点。 首先,海量数据管理...
基于云计算的海量数据挖掘模型不仅能满足传统数据挖掘的需求,而且能更高效、准确地从海量数据中提取信息,具有广阔的发展前景。通过将云计算技术应用于海量数据挖掘领域,可以有效地解决传统数据挖掘方法所面临的...
基于云计算的海量数据存储模型 基于云计算的海量数据存储模型是指一种用于存储和处理大规模数据的模型,通常基于云计算技术架构。这种模型可以在短时间内处理和存储大量的数据,提高了数据处理效率和存储密度。该...
为了实现这一点,数据治理涵盖了一系列关键组成部分,包括数据架构组织、数据模型、政策及体系制定、技术工具、数据标准、数据质量控制、影响度分析、作业流程以及监督和考核等。 数据治理的作用不仅限于技术层面,...
本书《Hadoop海量数据处理》是一本专注于Hadoop技术的专业技术书籍,旨在向读者介绍Hadoop生态系统的关键组件、核心概念以及在处理海量数据时的应用方法。全书分为基础篇、应用篇和总结篇三个部分,全面涵盖了Hadoop...
【云计算的海量数据存储模型】 随着信息技术的飞速发展,网络数据量呈指数级增长,传统的数据存储方式如DAS(直连存储)、NAS(网络附加存储)和SAN(存储区域网络)已难以应对这种挑战。DAS扩展性不足,NAS性能...
《海量数据思想,模型和方法》一书由Springer出版社发行,是关于处理和分析大量数据集的经典之作。本书由Florin Gorunescu撰写,作为Intelligent Systems Reference Library系列的一部分,该系列由Janusz Kacprzyk...
本课程“海量数据挖掘”旨在深入探讨这一主题,帮助学习者掌握在大数据环境中进行高效挖掘的技术和策略。 首先,我们需要理解“海量数据”的概念。在信息化社会,数据的产生速度远超以往,每天都有TB甚至PB级别的...
在Java编程中,处理海量数据是一项挑战,但通过合理的策略和工具可以有效地解决。这篇文章将探讨如何使用Java来处理大规模数据,主要关注于优化内存管理、分片处理、流式处理以及利用开源工具等方法。 首先,理解...
基于云计算的海量数据存储模型是将Hadoop框架与云计算理念相结合,构建出能够处理海量数据的存储解决方案。在这个模型中,主服务器负责接收和处理应用程序请求,而存储节点集群则承担数据的存储和访问。通过HDFS和...
### 海量数据预测模型设计及案例分析 #### 引言 随着信息技术的快速发展,各行各业积累了大量的数据。然而,单纯的数据积累并不能直接带来价值,必须通过深入分析才能挖掘出其背后的潜在价值。当前的数据库系统虽然...
在基于云计算的海量数据存储模型中,首先,医院信息化等领域的海量数据被上传到Hadoop平台上,HDFS负责存储这些数据,确保数据的可靠性和可访问性。接着,通过MapReduce算法,数据被分片并分布到多台服务器上进行...
大语言模型通常需要海量的文本数据来进行训练,这些数据来源多样,包括但不限于新闻文章、社交媒体帖子、书籍、网页内容等。高质量的语言数据能够帮助模型学习到更丰富的语言结构和表达方式,从而提高其自然语言处理...
总结来说,本研究在分布式系统、网络化性能检测、海量数据管理和三维空间数据索引等多个方面提出了创新的模型和算法,解决了传统集中式处理模式下的空间数据管理效率低、数据流转不畅等问题,为分布式VR-GIS海量三维...