我真的不明白 hadoop 缩放比 RDBMS 更好的真正原因。谁能详细解释一下?这与底层数据结构和算法有关系吗
最佳答案
RDBMS 在处理 TB 和 Peta 字节的海量数据方面面临挑战。即使您有独立/廉价磁盘冗余阵列 (RAID) 和数据粉碎,它也无法很好地扩展大量数据。您需要非常昂贵的硬件。
编辑: 要回答为什么 RDBMS 无法扩展,请查看 Overheads of RBDMS .
记录。组装日志记录并跟踪所有更改 在数据库结构中会降低性能。日志记录可能不是 如果可恢复性不是必需的,或者如果可恢复性 通过其他方式(例如,网络上的其他站点)提供。
锁定。传统的两阶段锁定会带来相当大的开销 因为对数据库结构的所有访问都由一个 单独的实体,锁管理器。
锁存。在多线程数据库中,许多数据结构 必须在他们可以被访问之前被锁存。删除这个 功能和使用单线程方法有一个明显的 性能影响。
缓冲区管理。主存数据库系统不 需要通过缓冲池访问页面,从而消除了 对每个记录访问的间接访问。
Hadoop 如何处理?:
Hadoop 是一种基于 Java 的免费编程框架,支持在分布式计算环境中处理大型数据集,可以在商品硬件上运行。它对于存储和检索大量数据很有用。
Hadoop 实现存储机制 (HDFS) 和处理作业(YARN Map reduce 作业)可以实现这种可扩展性和效率。除了可扩展性之外,Hadoop 还提供存储数据的高可用性。
可扩展性、高可用性、处理大量数据(结构化数据、非结构化数据、半结构化数据)和灵 active 是 Hadoop 成功的关键。
数据存储在数千个节点上,处理是在存储数据的节点上(大部分时间)通过 Map Reduce 作业完成的。处理前端的数据局部性是Hadoop成功的关键领域之一。
这是通过名称节点、数据节点和资源管理器实现的。
要了解 Hadoop 如何实现这一点,您必须访问这些链接:HDFS Architecture , YARN Architecture和 HDFS Federation
RDBMS 仍然适用于千兆字节数据的多次写入/读取/更新和一致的 ACID 事务。但不适合处理 Tera 字节和 Peta 字节的数据。具有 CAP 理论的 Consistency 和 Availability Partitioning 两个属性的 NoSQL 在某些用例中表现良好。
但 Hadoop 并不意味着具有 ACID 属性的实时事务支持。它适用于批处理的商业智能报告 - “一次写入,多次读取”范式。
再看一个相关的 SE 问题:
关于Hadoop 与 RDBMS 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32538650/
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
方法应返回-1,0或1分别表示“小于”、“等于”和“大于”。对于某些类型的可排序对象,通常将排序顺序基于多个属性。以下是可行的,但我认为它看起来很笨拙:classLeagueStatsattr_accessor:points,:goal_diffdefinitializepts,gd@points=pts@goal_diff=gdenddefothercompare_pts=pointsother.pointsreturncompare_ptsunlesscompare_pts==0goal_diffother.goal_diffendend尝试一下:[LeagueStats.new(
我有两个文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,我想写入一个新文件notinbook.txt。我写了我能想到的最好的东西,但考虑到我是一个糟糕的/新手程序员,它失败了。这是我的东西g=File.new("notinbook.txt","w")File.open("926.txt","r")do|f|while(line=f.gets)x=line.chompifFile.open("master.txt","w")do|h|endwhile(line=h.gets)ifline.chomp!=xputslineendende
我正在尝试对某些帖子的评论使用简单的身份验证。用户使用即时ID和密码输入评论我使用“bcrypt”gem将密码存储在数据库中。在comments_controller.rb中像这样@comment=Comment.new(comment_params)bcrypted_pwd=BCrypt::Password.create(@comment.user_pwd)@comment.user_pwd=bcrypted_pwd当用户想要删除他们的评论时,我使用data-confirm-modalgem来确认数据在这部分,我必须解密用户输入的密码以与数据库中的加密密码进行比较我怎样才能解密密码,
我正在运行这样的代码:ifvalid_from>Date.today当我运行它时,我得到一个错误提示comparisonofDatewithnilfailed我假设它正在发生,因为在某些情况下valid_from是nil。有没有办法避免出现此错误? 最佳答案 你可以这样做:ifvalid_fromandvalid_from>Date.today...end这将在第一个子句上短路,因为valid_from为nil,因此为false。 关于ruby-Date与nil的比较失败-ruby,我们
以下测试中的第3个失败:specify{(0.6*2).shouldeql(1.2)}specify{(0.3*3).shouldeql(0.3*3)}specify{(0.3*3).shouldeql(0.9)}#thisonefails这是为什么呢?这是浮点问题还是ruby或rspec问题? 最佳答案 从rspec-2.1开始specify{(0.6*2).shouldbe_within(0.01).of(1.2)}在那之前:specify{(0.6*2).shouldbe_close(1.2,0.01)}
有没有简单的方法(即使用宇宙飞船运算符)在Ruby中定义基于两个不同属性的比较?IE。如果我有一个包含两个属性attr1和attr2的类,是否有Rubyesque方法在attr1上比较此类的两个实例,如果它们相等,则在attr2上比较它们? 最佳答案 这是一种易于扩展(扩展到更多属性)的方式:def(other)[self.attr1,self.attr2][other.attr1,other.attr2]end 关于Ruby-使用Comparablemixin比较两个不同属性的对象,我
ruby1.9.3dev(2011-09-23修订版33323)[i686-linux]轨道3.0.20最近为什么在与DateTimeonRails相关的RSpecs项目上工作我发现在给定日期以下语句发出的值date.end_of_day.to_datetime和date.to_datetime.end_of_day虽然它们表示相同的日期时间,但比较时返回false。为了确认这一点,我打开了Rails控制台并尝试了以下操作1.9.3dev:053>monday=Time.now.monday=>2013-02-2500:00:00+05301.9.3dev:054>monday.cla
now=Time.zone.now=>Wed,19Feb201421:30:56UTC+00:00Time.zone.at(now.to_i)=>Wed,19Feb201421:30:56UTC+00:00now==Time.zone.at(now.to_i)=>false这怎么可能?更新:Time.zone.at(now.to_i).to_i==now.to_i=>true 最佳答案 Ruby跟踪时间精确到纳秒:now=Time.zone.now=>Wed,19Feb201421:30:56UTC+00:00Time.zone.a