`
Tristan_S
  • 浏览: 378611 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Mongodb Hbase oracle

 
阅读更多
Mongodb/hbase Oracle
减少表 实现十分复杂的数据形式的存储 (大对象)传统   (小对象)
分片,集群 维护方便 分区麻烦
海量数据TB级别 (更大的要用hbase) 小数据量 GB级别
文档存储 / 列式存储 ACID
性价比高(廉价的硬盘) 成本高


HBase的优点:
分布式,易扩展,高性价比,运维成本低都是它的优点。HBase可以支持海量数据,单张表的数据量不上T,都不好意思出来打招呼。甚至可以拿很烂的SATA盘来作为存储,由于依赖底层的HDFS。新装的机器甚至可以不用做硬RAID。
HBase可以在任何时候随时宕掉2,3台机器,就当什么都没发生似的(当然master除外,但是HBase,hadoop的master节点负载都很”清闲“)。这是HBase本身分布式的架构,先天性的优势。


那么MongoDB究竟应该怎么用呢?
首先,忘记SQL
你应该忘记你学过的那些优雅无敌的SQL,不是说为了提升检索性能,扔索引就有好处。
有一个简单的事实如下:只有一个默认的_id 索引,此时插入性能为1,你再加一个索引,插入性能约1/2,再加一个约1/3 ,以此类推......
如果这个事实对你是很震撼的,那说明你还没有忘记SQL,接着忘。
MongoDB的索引对插入性能有着不可忽略的拖后腿效应,所以,我们应该使用且仅使用 _id 作为插入key,作为查询key,作为所有的那个key。
其次,直接忘记搜索这件事。
把MongoDB当做你的硬盘,给他文件名去操作文件.这就是Key-Value数据库的做法,你稍加设计就能这么用。
那么其实你所有的操作可以简化为两个指令,逻辑上 就是一个字典
你给他_id,往字典里插一个数据,或者拿一个数据。
Save({_id:xxx,.....})
FindOne({_id:xxx})
要想高性能,善用那个_id,把你原来准备当主键的那个玩意,hash成_id.
把你原来准备的查询条件,什么?查询,拿_id来,别的全砍掉。
第三、这不是数据表
记住,这不是数据表,一个_id对应的东西不是一行数据,而是一个文件。
文件存储和表存储有什么不同呢?
我举个例子,比如我们要存储用户列表和每个用户的道具列表。
数据表的做法是建一张用户表,一张道具表,道具表里有个字段表示他属于哪个用户。
然后,你就离不开万恶的查询了。
然后如果一个用户有100条道具,100万用户意味着道具表有一亿条记录。
这时候就开始考验你的小数据库了,但这都是过去式了,这一亿的道具,用MongoDB,根本不是个事儿
因为MongoDB的方法是当做文件存,只设计一个用户集合,每个用户的信息是一个文件,然后这100个道具就分开存在每个用户的文件里。
然后来比较一下,我们取得用户的记录,然后从中拿出100个道具,NoSQL方法。
查一亿的表,找出属于某个用户的记录。
熟快熟慢?
然后你可能回想,SQL方法,我也可以搞个道具字段,把用户的100个道具用某种协议打包,然后操作啊,一样可以取得巨大的优化呀。
没错,你的想法很好,你正在用NOSQL的方式用SQL。
第四、文件存储的精华之处
如果问题止于此处,MongoDB就毫无优势可言了,如果这个方法在SQL数据库上也是如此容易使用,那还费劲搞MongoDB干什么?
我们再折腾一点,如果每个道具还要存100条转手记录,你还是可以打包,但你这个打包字段已经1M了。
于是每次存取这个打包字段都是一个系统工程了,还要负担1M的流量。
MongoDB这边呢?我们可以直接对文件的一部分进行读写,比如我只返回一个用户的第二个道具的信息,和返回第二个道具的第1~30条转手记录。
这,是一种怎样的差距啊。
你想要一张美女的照片,你朋友有,但是他只有一个压缩包,他那里没有解包工具,于是他把整个包传给了你。他想问你要一张照片,但是他没有压缩工具,为了存档需要,他让你再压进包里传给他。
这个朋友就是你的用户表的一行,如果换成真实世界的事件是多么的不可思议,这就是在一个字段里打包数据的问题。
MongoDB的一条记录就是一个脑筋更正常的朋友,你要他一张照片,他从包里找出来给你。你给他一张照片,他分门别类的放置到他的包里去。
用文件的思维去访问,MongoDB是一个更好的朋友。
审视一下你项目中的大部分的数据需求,是不是都可以用这种方式去组织呢?
如果是,加入NOSQL吧,我们的口号是:很暴力不SQL

分享到:
评论

相关推荐

    MongoDB开发使用手册

    - 本章节将对主流NoSQL数据库进行详细介绍,包括但不限于Memcached、Redis、HBase等。 **1.3 MongoDB概述** - **MongoDB内部结构:** - MongoDB采用文档模型,由数据库(Database)、集合(Collection)和文档...

    10天掌握MongoDB 2012翻新完整版

    - 示例产品:Tokyo Cabinet/Tyrant、Redis、Voldemort、Oracle BDB。 - **列式数据库**: - 特点:按列存储数据,适合大数据分析场景。 - 示例产品:Cassandra、HBase、Riak。 - **文档型数据库**: - 特点:...

    Oracle数据库应用课件

    常见的数据库管理系统有关系型数据库(如Oracle)、非关系型数据库(如MongoDB)、分布式数据库(如Hadoop HBase)和内存数据库(如Redis)。每种类型的DBMS都有其特定的用途和优势,选择哪种取决于具体的应用需求。...

    MongoDB入门篇1

    例如,MongoDB属于文档存储数据库,Cassandra和HBase是列存储数据库,Redis是内存键值存储数据库,而Neo4J则是图存储数据库。 5. NoSQL的四大家族: - 列存储:适用于大规模数据分析,如Hbase。 - 键值存储:提供...

    深入学习MongoDB

    * Key-Value 存储,例如 Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB。 * 列式数据库,例如 Cassandra, HBase, Riak。 * 文档型数据库,例如 CouchDB, MongoDB。 * 图结构数据库,例如 Neo4J, InfoGrid, ...

    4_HBase.docx

    - **代表产品**:MySQL、Oracle、SQL Server。 - **瓶颈**: - 高并发读写需求处理能力有限。 - 海量数据的高效读写能力受限。 - 难以实现高扩展性和高可用性。 - 事务一致性带来的性能开销较大。 - 读写实时性...

    《10天掌握MongoDB》2012翻新完整版

    代表性产品包括Tokyo Cabinet/Tyrant、Redis、Voldemort 和 Oracle BDB。 - **列式数据库:**采用列簇式存储方式,将同一列的数据存储在一起,便于对特定列进行高效检索。代表性产品包括 Cassandra、HBase 和 Riak。...

    数据库比较 SQL.docx

    本文将对比五种主要的数据库系统:HBase、MongoDB、MySQL、Oracle和Redis,探讨它们各自的特点、用途和适用场景。 首先,HBase是一款基于Apache的列存储数据库,设计用于处理大规模数据集。它构建在Hadoop之上,...

    基于Sql语言的数据库设计与优化攻略源码

    该源码项目专注于数据库设计与优化,采用Sql语言核心,并整合Java进行功能扩展。项目包含120个文件,涵盖52个Java...项目支持MySQL、Redis、Oracle、MongoDB、HBase等多种数据库技术,旨在提供全面的数据库解决方案。

    几种主流No SQL的测试和比较

    例如,HBase和MongoDB在读写操作上采用了不同的策略,HBase倾向于行列混合索引,而MongoDB采用自动分区与平衡机制,这直接影响了它们在大规模数据处理上的效率和资源消耗。 #### 新的问题与挑战 引入NoSQL数据库...

    DBeaver全能连接数据库工具,免费开源哦

    基本上支持市面上的所有数据连接,access,h2,oracle,mysql,postgresql,db2,hbase等

    数据库新技术与新应用--mongodb.docx

    2009 年 NoSQL 运动正式提出,代表性的数据库包括 MongoDB、Cassandra、HBase 和 Riak。 关系型数据库与分布式系统简介 关系型数据库基于 ACID(原子性、一致性、隔离性和持久性)原则,通过 SQL 查询语言实现数据...

    nosql分布式数据库期末考试题.docx

    - Oracle 数据库也是关系型数据库管理系统,支持SQL标准。 - **D、** - 该选项未给出具体内容,但根据题目要求应为非关系型数据库。正确答案应为**D**。 **2. 构造化查询语句中,数据定义语言的缩写为(A)B、DQLC...

    用于记录在工作和学习过程中积累的数据库使用知识和应用经验,重点为 Oracle 和 MySQL 以及其他 NoSQL.zip

    NoSQL数据库,如MongoDB、Cassandra和HBase,是近年来崛起的一种非关系型数据库,适用于大数据处理和分布式系统。NoSQL数据库强调水平扩展、高并发读写和数据分片,适合处理结构化和半结构化数据。了解NoSQL的核心...

    MongoDB开发使用手册包含LINUX/WINDOWS下面安装使用开发的详细介绍

    这些系统往往由Apache + MySQL + PHP、IIS + ASP + SQL Server、IIS + ASP.NET + SQL Server或TOMCAT + JSP + Oracle等组合构成。 - **博客与去中心化网站**:Web 2.0时代的到来催生了博客等去中心化网站。这些网站...

    分布式数据库调研报告.pdf

    Oracle的NoSQL Database,作为Oracle大数据解决方案的一部分,为企业级应用提供了一种非关系型数据库选择,尤其是在需要处理大量键值对数据时。 总的来说,MongoDB凭借其强大的查询能力、灵活的数据模型和良好的...

    Dbeaver 4.1 最后一个企业版 【解压即可使用】

    Dbeaver是一款强大的开源数据库管理工具,适用于各种数据库系统,包括MySQL、Oracle、Redis、MongoDB、Hbase以及DB2等。在这个特定的版本——Dbeaver 4.1企业版,用户无需安装,解压后即可直接使用,极大地简化了...

    清华大学精品大数据实战课程(Hadoop、Hbase、Hive、Spark)PPT课件含习题(13页) 第1章 大数据概述.pptx

    传统的数据库,如Oracle、SQL Server、MySQL等,虽然易用且便于维护,但在面对高并发读写需求和海量数据时,其性能和扩展性往往显得不足。 1.1 从数据库到大数据库 传统关系型数据库基于ACID(原子性、一致性、...

Global site tag (gtag.js) - Google Analytics