重复问题
我对Google的Bigtable不太了解,想知道它与像MySQL这样的关系数据库之间的区别。 它们各自的限制是什么?
重复问题
我对Google的Bigtable不太了解,想知道它与像MySQL这样的关系数据库之间的区别。 它们各自的限制是什么?
Bigtable是谷歌为处理公司日常大量信息而发明的技术。一个Bigtable数据集可以增长到巨大的规模(多个PB),并且存储分布在许多服务器上。使用Bigtable的系统包括Google的Web索引和Google Earth等项目。
根据有关该主题的Google白皮书:
Bigtable是一种稀疏分布式持久性多维排序映射。该映射由行键、列键和时间戳索引;映射中的每个值都是未解释的字节数组。
与MySQL等技术相比,Bigtable的内部机制非常不同,因此很难进行比较,并且预期目标也不太重叠。但是,您可以将Bigtable视为单表数据库的一个组成部分。例如,想象一下,如果您尝试使用MySQL数据库实现Google的整个Web搜索系统,那么您将遇到什么样的困难--Bigtable是为解决这些问题而构建的。
可以使用名为GQL(“gee-kwal”)的语言从AppEngine等服务查询Bigtable数据集,该语言基于SQL的子集。 GQL中明显缺少任何类型的JOIN命令。由于Bigtable数据库的分布式性质,在两个表之间执行联接将非常低效。因此,程序员必须在其应用程序中实现此类逻辑,或者设计其应用程序以使其不需要。
Google的BigTable和其他类似的项目(例如CouchDB,HBase)是数据库系统,其定位为数据大部分是去规范化的(即重复和分组的数据)。
主要优点是: - 由于去规范化,连接操作代价更小 - 由于数据独立性,数据的复制/分布代价更小(即,如果您想将数据分布到两个节点上,您可能不会遇到一个实体在一个节点中而另一个相关实体在另一个节点中的问题,因为相似的数据已经分组了)
这种类型的系统适用于需要实现最佳扩展性(即加入更多节点时性能成比例增加)的应用程序。在像MySQL或Oracle这样的关系型数据库管理系统中,如果您开始添加更多节点,如果你连接两个不在同一个节点中的表,则连接成本更高。当处理大量数据时,这变得很重要。
关系型数据库管理系统之所以好是因为存储模型的丰富性(表格,连接,外键)。分布式数据库之所以好是因为易于扩展。