数据库选型、Oracle 、Mysql、Redis、MSSQL、Access和国产数据库     Redis: 分布式缓存,用来存session, 页面权限,系统参数缓存等。速度快,适合做缓存。mongodb: 通过字段冗余,减少跨表查询,数据可支持横向发展,不支持事务,对数据性能要求高,对数据安全性要求不高。Oracle: 支持事务 数据安全性高 。Oracle不能存数组,只能存字符串,mongodb却可以存数组,但是查询会比较麻烦。 相同点:  都是关系型数据库管理系统           都是目前流行的数据库不同点:oracle是重量级型数据库,收费,对oracle数据库有任何的服务,支持大并发,大访问量,是oltp(on-line transaction procession联机事务处理系统)最好的工具,闭源mysql是轻量型数据库,免费,没有服务恢复数据 开源,o代表了oracle,m代表了mysql1.单引号的处理】m可以用双引号包起字符串,o只能用单引号包起字符串,在插入和更改字符串

作者:李宇明
链接:https://www.zhihu.com/question/31750851/answer/139665111
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

(1)阿里的数据库:OceanBase & PolarDB

OceanBase是蚂蚁金服阳振坤老师团队开发的,官方称为“完全自主研发的金融级分布式关系数据库”。下面是其官网的介绍:OceanBase 对传统的关系数据库进行了开创性的革新。在普通硬件上实现金融级高可用,在金融行业首创“三地五中心”城市级故障自动无损容灾新标准,同时具备在线水平扩展能力,创造了4200万次/秒处理峰值的纪录(注:当时TPS官宣为25.6w)。

现在OceanBase的版本已经2.x了,曾经0.4版本的开源链接为:alibaba/oceanbase

今年OceanBase TPC-C的评测刷遍了朋友圈,TPS达到了100w (榜单第一

 

PolarDB是阿里巴巴李飞飞老师、何登成老师这边团队负责的,X-DB、PolarDB-X应该都是相关的产品。下面是其官网的介绍:POLARDB是阿里巴巴自主研发的下一代关系型分布式云原生数据库,目前兼容三种数据库引擎:MySQL、PostgreSQL、高度兼容Oracle语法。 计算能力最高可扩展至1000核以上,存储容量最高可达 100T。经过阿里巴巴双十一活动的最佳实践,让用户既享受到开源的灵活性与价格,又享受到商业数据库的高性能和安全性。

OceanBase是完全从头写的,PolarDB应该是基于MySQL开发的。PolarDB入选15项世界互联网领先科技成果。可以这么理解,OceanBase主要用于支付宝这边的应用、PolarDB主要用于淘宝、天猫这边的应用。

毋庸置疑,在数据库领域,尤其是工业级数据库产品,阿里在国内是领先的。

 

(2)腾讯的TDSQL

其官网简介:分布式数据库(Tencent Distributed SQL,TDSQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为用户提供完整的分布式数据库解决方案。目前 TDSQL 已经为超过500+的政企和金融机构提供数据库的公有云及私有云服务,客户覆盖银行、保险、证券、互联网金融、计费、第三方支付、物联网、互联网+、政务等领域。TDSQL 亦凭借其高质量的产品及服务,获得了多项国际和国家认证,得到了客户及行业的一致认可。

 

(3)华为的GaussDB

全球首款AI-Native数据库 -- 今年也和不少高校建立了合作。网上的介绍信息不多~


(4)TiDB 是国内 PingCAP 团队开发的一个分布式 SQL 数据库 -- 感觉生态做得很好,天天各种PoC和应用,朋友圈都被刷爆了 : )。

其灵感来自于 Google 的 F1,TiDB 支持包括传统 RDBMS 和 NoSQL 的特性。TiDB是开源的(16年7月开始开源的,14年5月TiDB应该就可以做了),更新是很活跃的。

githup上的TiDB 链接为:pingcap/tidb

下面是在其官网摘抄的:PingCAP 成立于 2015 年 4 月,是业界领先的企业级分布式 OLTP 解决方案提供商,是国内唯一专注于开源 NewSQL 领域的团队,具备全球竞争力,致力于成为世界领先的大数据技术和解决方案提供商。创始团队是国内最一流的开源技术团队。 公司专注于实现高性能,在线弹性扩容和分布式事务特性,提供全球最*的跨数据中心容灾分布式 NewSQL 数据库,为客户在去 IOE 大背景下提供可靠的解决方案,是企业在云上面的最佳关系型数据库。

 

(5)达梦数据库

达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。目前应该已经到了8.0的版本,简称DM8。

武汉达梦数据库有限公司成立于2000年,为国有控股的基础软件企业,专业从事数据库管理系统研发、销售和服务。其前身是华中科技大学数据库与多媒体研究所,是国内最早从事数据库管理系统研发的科研机构。

公司相关链接:达梦数据库_专业的数据库产品提供商和技术服务商

DM7的产品介绍:DM7_产品_达梦数据库_专业的数据库产品提供商和技术服务商

应用案例很多:应用案例_达梦数据库_专业的数据库产品提供商和技术服务商

达梦数据库产品已成功用于我国国防军事、*、安全、财政金融、电力、水利、电信、审计、交通、信访、电子政务、税务、国土资源、制造业、消防、电子商务、教育等20多个行业及领域,装机量超过10万套,打破了国外数据库产品在我国一统天下的局面,取得了良好的经济效益和社会效益。(官网摘抄的)

 

(6)GBase南大通用

下面都是官网摘下来的:南大通用是国产数据库的领军企业。2014-2015连续两年在赛迪顾问发布的《中国平台软件市场研究年度报告》和IDC年度研究报告中被评为“国产数据库*”。南大通用以“让中国用上世界级国产数据库”为使命,打造了三款国内领先、国际同步的自主可控数据库产品,并在金融、电信、政务、国防、企事业等领域拥有上万家用户。

产品国内领先、国际同步:GBase 8a是结构化大数据分析领域的产品,与国外同类主流产品保持技术同步,市场同级。以大规模并行处理、列存储,高压缩和智能索引技术为基础,具有满足各个数据密集型行业日益增大的数据分析、数据挖掘、数据备份和即席查询等需求的能力。GBase 8t是基于IBM informix源代码、编译和测试体系自主研发的交易型数据库产品,通过中国信息安全认证中心的安全可靠认证并在高可用、灾备、空间数据、时序数据等方面技高一筹。

公司链接:天津南大通用数据技术股份有限公司GBASE国产数据库-列存|MPP数据库|OLAP|分析型数据库|行存|OLTP|通用数据库|事务型数据库|安全数据库|大数据|数据管理|数据安全

产品好多: 产品介绍总目录-天津南大通用数据技术股份有限公司

应用也好多:-成功案例-方案及案例-GBase 8t|国产数据库|实时OLAP|OLTP|高端事务型数据库|时间序列-南大通用 GBASE国产新型数据库 行业大数据专家

 

(7)神通数据库

神通数据库企业版是神舟通用公司拥有自主知识产权的企业级、大型通用数据库管理系统。公司拥有由8名博士领衔的300余人的数据库专业队伍,其中研究生以上占60%,本科生38%。

公司链接:神通数据库--国产数据库、数据挖掘、大数据 4006-198-288

应用案例也比较多:电力行业 神通数据库――国产数据库、数据挖掘、大数据 4006-198-288

 

(8)金仓数据库

北京人大金仓信息技术股份有限公司(简称:人大金仓)系中国电子科技集团公司(CETC)成员企业,人大金仓由中国人民大学一批在国内开展数据库教学、科研、开发的专家发起创立,是中国自主可控数据库、大数据相关产品及解决方案的提供商。

百度百科中的一段介绍:大型应用,50个并发用户以上(性能感觉比较低),可以使用企业版配置文件进行用户数量的更新。应该比较适用企业ERP应用。

 

(9)EsgynDB

上海易鲸捷信息技术有限公司

2015年7月成立,包括30名HP Neoview/SeaQuest项目组成员,公司的董事长为李为冲博士,曾任中国惠普有限公司的首席技术官。

EsgynDB(本身不开源)源于惠普等推动的Apache Trafodion开源数据库(Trafodion开源链接为:Apache Trafodion)。底层是HBase/Hadoop,支持OLTP和OLAP,接口为SQL。Trafodion有很强的OLAP分析能力,但是更偏重OLTP;在当前的Trafodion版本中,所有的列数据都存储在同一个ColumnFamily中(相当于行存)。

已有的应用场景:酷我音乐,主要用户报表统计(AP);端点智能网络安全服务和批量威胁情报提供商Webroot,每天高达10亿的事务处理,最大数据表有650亿条记录(TP)。

相关链接:抢干货,来“大数据应用”创新案列沙龙吧!-EsgynDB大数据库-大不六文章网(wtoutiao.com)

 

(10)SequoiaDB巨杉数据库(自己定位:新一代分布式NewSQL数据库)

广州巨杉软件开发有限公司(SequoiaDB巨杉数据库)。2013年2月就发布了1.0的版本。2014年12月开源,现在版本应该是v1.12的稳定版本,开源链接(15年底后好像就没有更新了):SequoiaDB/sequoiadb/tree/master | CODE。2016年7月份刚拿了1000w美元的融资。

关键特征:支持标准SQL访问,分布式高性能引擎,双引擎灵活存储,深度整合Spark 2.0,支持事务(总是与mongdb比事务支持能力,应该比较弱),双活容灾,冷热数据隔离等。

已有的应用场景:官网称有很多公司在用,如:民生银行、广发银行、中国银行、电信、移动等等(SequoiaDB解决方案_SequoiaDB巨杉数据库)。

其自己总结的适用应用场景:SequoiaDB应用场景与行业划分_SequoiaDB巨杉数据库

相关链接:【先锋】SequoiaDB CTO王涛谈打造超越MongoDB的事务、高性能NoSQL

 

(11)K-DB数据库

浪潮公司

K-DB是一款专为天梭K1定制优化的数据库,言外之意K-DB不会有X86版本。浪潮在发布会上没有避讳K-DB的出生来历,坦诚K-DB由浪潮和韩国第一大企业级软件提供商Tmax公司共同研发,Tmax公司的数据库在韩国市场已经拥有超过1175个商用案例,友利银行、韩亚银行和现代汽车的核心生产系统都采用了其数据库。

相关链接:inspur k-db

 

(12)OpenBASE

OpenBASE是东软集团有限公司软件产品事业部推出的我国第一个自主知识产权的商品化数据库管理系统,该产品由东软集团有限公司软件产品事业部研发并持有版权。

相关链接:OpenBASE:数据库管理系统_东软集团

应用场景也比较多:OpenBASE:数据库管理系统_东软集团

 

(13)华易数据库Huayisoft DB Server

国产数据库――华易数据库管理系统、云计算底层支撑平台、政务云、企业云、B/S财政统发工资系统、B/S事业单位岗位管理系统、B/S固定资产管理系统、爆破云、在线爆破设计软件、CNC智能自动串程式、智能控温开关(液晶开关),欢迎您!

 

(14)HUABASE-华鼎数据库

(15)神州OSCAR由北京神舟航天软件技术有限公司研发

----(11)至(15) 听得比较少,网上信息也比较少。

 

(16)Kylin是ebay大数据部门(应该是一群来自中国的工程师)从2014年开始研发的支持TB到PB级别数据量的分布式Olap分析引擎。

Kylin(麒麟)是一个Hadoop生态圈下的MOLAP系统,开源URL:Apache Kylin | Home

其特点包括:1. 可扩展的超快的OLAP引擎;2. 提供ANSI-SQL接口;3. 交互式查询能力;4. MOLAP Cube 的概念;5. 与BI工具可无缝整合。

Kylin典型的应用场景如下:1. 用户数据存在于Hadoop HDFS中,利用Hive将HDFS文件数据以关系数据方式存取,数据量巨大,在500G以上;2. 每天有数G甚至数十G的数据增量导入;3. 有10个左右为固定的分析维度。

Kylin的核心思想是利用空间换时间,由于查询方面制定了多种灵活的策略,进一步提高空间的利用率,使得这样的平衡策略在应用中是值得采用的。(都是网上摘的)

 

(17)ZILLIZ数据库

ZILLIZ(www.ZILLIZ.com)成立于2016年,总部位于上海,是异构众核加速数据库的开拓者和全球领先者。公司核心产品MegaWise数据库和传统数据库相比,查询性能提升100倍以上,硬件和运维成本降低10倍。同时,ZILLIZ提供使用异构众核加速数据ETL,到加速数据仓库,再到加速AI模型训练,最后到加速数据可视化的端到端数据智能整体解决方案。

ZILLIZ的产品和解决方案在金融、电信、医疗、智慧城市和电子商务领域有着广泛应用前景。

 

Redis: 分布式缓存,用来存session, 页面权限,系统参数缓存等。速度快,适合做缓存。
mongodb: 通过字段冗余,减少跨表查询,数据可支持横向发展,不支持事务,对数据性能要求高,对数据安全性要求不高。
Oracle: 支持事务 数据安全性高 。Oracle不能存数组,只能存字符串,mongodb却可以存数组,但是查询会比较麻烦。

相同点:  都是关系型数据库管理系统
           都是目前流行的数据库
不同点:oracle是重量级型数据库,收费,对oracle数据库有任何的服务,支持大并发,大访问量,是oltp(on-line transaction procession联机事务处理系统)最好的工具,闭源
mysql是轻量型数据库,免费,没有服务恢复数据 开源,
o代表了oracle,m代表了mysql
1.单引号的处理】
m可以用双引号包起字符串,o只能用单引号包起字符串,在插入和更改字符串的必须做单引号的替换,把所有出现一个单引号替换成两个单引号
2.自动增长的数据类型处理】
mysql是一个提供自增,oracle不支持自增,需要建立一个自动增长的序列号,来完成
3.sql语句的扩展和灵活性】(分页,主键的自增,单引号)
m对sql语句有很多非常实用方便的扩展,比如limit inset可以一次插入多行数据,select某些管理数据可以不加from。o在这一方面比较稳重传统一些,严格
4.事务提交的方式】
o默认不自动提交,需要用户手动提交,支持事务
m默认自定提交,不支持事务
5.字段
m的非空字段有空的内容,o里定义了非空字段就不容许有空的内容,按MYSQL的NOT NULL来定义Oracle是is null
6.内存】
o占用内存空间大m占有小。
7.线程】
m是单进程多线程,o是多进程(在Windows下也是在单进程),Windows下只能使用一个用户,或者进行不同用户之间的切换,Linux是对多用户或者相同用户可以同时连接操作系统,
Redis:(非关系型数据库)

是一个基于内存高性能的key-value数据库
数据类型:string字符串,hash哈希,list列表。zset有序集合,set集合
优点: 速度快,因为数据存在内存
支持丰富的数据类型
支持事务,操作都是原子性
丰富的特性:可用于缓存,消息,
持久化

SpringBoot、SpringCloud、SpringMVC、Spring、Mybatis、MySQL、Redis、Oracle

NoSQL 的全称是 Not Only SQL,也可以理解非关系型的数据库,是一种新型的革命式的数据库设计方式,不过它不是为了取代传统的关系型数据库而被设计的,它们分别代表了不同的数据库设计思路。
MongoDB:

    它是一个内存数据库,数据都是放在内存里面的。

    对数据的操作大部分都在内存中,但MongoDB并不是单纯的内存数据库。

    MongoDB 是由 C++ 语言编写的,是一个基于分布式文件存储的开源数据库系统。

    在高负载的情况下,添加更多的节点,可以保证服务器性能。

    MongoDB 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

    MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MongoDB 的存储特点

    在传统的关系型数据库中,数据是以表单为媒介进行存储的,每个表单均拥有纵向的列和横向的行。

    由此可见,相比较 MySQL,MongoDB 以一种直观文档的方式来完成数据的存储。它很像 JavaScript 中定义的 JSON 格式,不过数据在存储的时候 MongoDB 数据库为文档增加了序列化的操作,最终存进磁盘的其实是一种叫做 BSON 的格式,即 Binary-JSON。
MongoDB 的应用场景

    在另一方面,对开发者来说,如果是因为业务需求或者是项目初始阶段,而导致数据的具体格式无法明确定义的话,MongoDB的这一鲜明特性就脱颖而出了。相比传统的关系型数据库,它非常容易被扩展,这也为写代码带来了极大的方便。

    不过 MongoDB 对数据之间事务关系支持比较弱,如果业务这一方面要求比较高的话,MongoDB 还是并不适合此类型的应用。

    非关系型数据库(NoSQL ),属于文档型数据库。先解释一下文档的数据库,即可以存放 xml、json、bson 类型系那个的数据。这些数据具备自述性(self-describing),呈现分层的树状数据结构。数据结构由键值(key=>value)对组成。

    存储方式:虚拟内存+持久化。
持久化方式:

    MongoDB 的所有数据实际上是存放在硬盘的,所有要操作的数据通过 mmap 的方式映射到内存某个区域内。

    然后,MongoDB 就在这块区域里面进行数据修改,避免了零碎的硬盘操作。

    至于 mmap上的内容flush到硬盘就是操作系统的事情了,所以,如果,MongoDB 在内存中修改了数据后,mmap 数据flush到硬盘之前,系统宕机了,数据就会丢失。
主要特点:

    MongoDB 的提供了一个面向文档存储,操作起来比较简单和容易。

    你可以在 MongoDB 记录中设置任何属性的索引 (如:FirstName=”Sameer”,Address=”8 Gandhi Road”)来实现更快的排序。

    你可以通过本地或者网络创建数据镜像,这使得 MongoDB 有更强的扩展性。

    如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。

    MongoDB支持丰富的查询表达式。查询指令使用 JSON 形式的标记,可轻易查询文档中内嵌的对象及数组。

    MongoDB使用 update() 命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。

    MongoDB中的 Map/reduce 主要是用来对数据进行批量处理和聚合操作。

    Map 和 Reduce。Map 函数调用 emit(key,value) 遍历集合中所有的记录,将 key 与 value 传给 Reduce 函数进行处理。

    Map 函数和 Reduce 函数是使用 JavaScript 编写的,并可以通过 db.runCommand 或 mapreduce 命令来执行 MapReduce 操作。

    GridFS 是 MongoDB 中的一个内置功能,可以用于存放大量小文件。

    MongoDB 允许在服务端执行脚本,可以用 Javascript 编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。

    MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C# 等多种语言。

    1. 它里面自带了一个名叫 GirdFS 的分布式文件系统,这就为 MongoDB 的部署提供了很大便利。而像 MySQL 这种比较早的数据库,虽然市面上有很多不同的分表部署的方案,但这种终究不如 MongoDB 直接官方支持来得便捷实在。

    2. 另外,MongoDB 内部还自建了对 map-reduce运算框架的支持,虽然这种支持从功能上看还算是比较简单的,相当于MySQL里 GroupBy 功能的扩展版,不过也为数据的统计带来了方便。

    3. MongoDB 在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内存资源相当丰富的话,这将极大地提高数据库的查询速度,毕竟内存的 I/O 效率比磁盘高多了。

    MongoDB 以 BSON 结构(二进制)进行存储,对海量数据存储有着很明显的优势。
监控

    MongoDB提供了网络和系统监控工具Munin,它作为一个插件应用于MongoDB中。

    Gangila是MongoDB高性能的系统监视的工具,它作为一个插件应用于MongoDB中。

    基于图形界面的开源工具 Cacti, 用于查看CPU负载, 网络带宽利用率,它也提供了一个应用于监控 MongoDB 的插件。

    查询语句:是独特的MongoDB的查询方式。

    适合场景:事件的记录,内容管理或者博客平台等等。

    架构特点:可以通过副本集,以及分片来实现高可用。

    数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。

    成熟度与广泛度:新兴数据库,成熟度较低,No SQL 数据库中最为接近关系型数据库,比较完善的 DB 之一,适用人群不断在增长。
MongoDB优点:

    1.性能优越:快速!在适量级的内存的MongoDB的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快,

    2.高扩展:第三方支持丰富(这是与其他的 No SQL 相比,MongoDB 也具有的优势)

    3.自身的 Failover 机制!

    4.弱一致性(最终一致),更能保证用户的访问速度

    5.文档结构的存储方式,能够更便捷的获取数据: json 的存储格式

    6.支持大容量的存储,内置 GridFS

    7.内置 Sharding
MongoDB缺点:

    主要是无事物机制!

    ①MongoDB不支持事务操作(最主要的缺点)

    ②MongoDB占用空间过大

    ③ MongoDB 没有如 MySQL 那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方
Redis:

    它就是一个不折不扣的内存数据库。
持久化方式:

    Redis所有数据都是放在内存中的,持久化是使用 RDB 方式或者 aof 方式。
MySQL:

    无论数据还是索引都存放在硬盘中。到要使用的时候才交换到内存中。能够处理远超过内存总量的数据。

    关系型数据库。

    在不同的引擎上有不同 的存储方式。

    查询语句是使用传统的 SQL 语句,拥有较为成熟的体系,成熟度很高。

    开源数据库的份额在不断增加,MySQL的份额页在持续增长。

    缺点就是在海量数据处理的时候效率会显著变慢。

    数据量和性能的比较:

    当物理内存够用的时候,Redis>MongoDB>MySQL

    当物理内存不够用的时候,Redis和MongoDB都会使用虚拟内存。

    实际上如果Redis要开始虚拟内存,那很明显要么加内存条,要么你就该换个数据库了。

    但是,MongoDB不一样,只要,业务上能保证,冷热数据的读写比,使得热数据在物理内存中,mmap 的交换较少。

    MongoDB还是能够保证性能。有人使用MongoDB存储了上T的数据。

    MySQL,MySQL根本就不需要担心数据量跟内存下的关系。不过,内存的量跟热数据的关系会极大地影响性能表现。

    当物理内存和虚拟内存都不够用的时候,估计除了MySQL你没什么好选择了。

    其实,从数据存储原理来看,我更倾向于将MongoDB归类为硬盘数据库,但是使用了 mmap 作为加速的手段而已。
简说mmap:

        mmap系统调用并不是完全为了用于共享内存而设计的。它本身提供了不同于一般对普通文件的访问方式,进程可以像读写内存一样对普通文件进行操作。

mmap 系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用。 read(),write()等操作。mmap 并不分配空间, 只是将文件映射到调用进程的地址空间里, 然后你就可以用 memcpy 等操作写文件, 而不用 write() 了.写完后用 msync() 同步一下, 你所写的内容就保存到文件里了. 不过这种方式没办法增加文件的长度, 因为要映射的长度在调用 mmap() 的时候就决定了。
MongoDB 与MySQL 的适用场景:

        MongoDB 的适用场景为:数据不是特别重要(例如通知,推送这些),数据表结构变化较为频繁,数据量特别大,数据的并发性特别高,数据结构比较特别(例如地图的位置坐标),这些情况下用 MongoDB , 其他情况就还是用 MySQL ,这样组合使用就可以达到最大的效率。

        1.如果需要将MongoDB作为后端 db 来代替MySQL使用,即这里MySQL与MongoDB属于平行级别,那么,这样的使用可能有以下几种情况的考量:

        (1)MongoDB所负责部分以文档形式存储,能够有较好的代码亲和性,json 格式的直接写入方便。(如日志之类)

        (2)从 data models 设计阶段就将原子性考虑于其中,无需事务之类的辅助。开发用如 nodejs 之类的语言来进行开发,对开发比较方便。

        (3)MongoDB本身的 failover 机制,无需使用如 MHA 之类的方式实现。

        2.将MongoDB作为类似Redis,memcache 来做缓存db,为 MySQL提供服务,或是后端日志收集分析。 考虑到MongoDB属于 No SQL 型数据库,SQL 语句与数据结构不如 MySQL那么亲和 ,也会有很多时候将MongoDB做为辅助MySQL而使用的类Redis memcache 之类的缓存db来使用。 亦或是仅作日志收集分析。

        MongoDB 有一个最大的缺点,就是它占用的空间很大,因为它属于典型空间换时间原则的类型。那么它的磁盘空间比普通数据库会浪费一些,而且到目前为止它还没有实现在线压缩功能,在 MongoDB 中频繁的进行数据增删改时,如果记录变了,例如数据大小发生了变化,这时候容易产生一些数据碎片,出现碎片引发的结果,一个是索引会出现性能问题。

        另外一个就是在一定的时间后,所占空间会莫明其妙地增大,所以要定期把数据库做修复,定期重新做索引,这样会提升MongoDB 的稳定性和效率。

        1.MySQL 来自女儿的名字; MongoDB 来自 humongous

        2.MySQL 使用 Table/Row/Column; MongoDB 使用 Collection/Document

        3.MySQL 需要指定 table 的 schema; MongoDB的 collection 的每个 document 的 schema 可以*修改

        4.MySQL 支持 join; MongoDB 没有 join

        5.MySQL 使用 SQL 语言; MongoDB 使用类似 JavaScript 的函数
命令对比

        MongoDB与MySQL命令对比 传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB 是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式*的特点。

        MongoDB (文档型数据库):提供可扩展的高性能数据存储

        1、基于分布式文件存储

        2、高负载情况下添加更多节点,可以保证服务器性能

        3、将数据存储为一个文档
MongoDB 与MySQL 的比较

        1、稳定性

        2、索引,索引放在内存中,能够提升随机读写的性能。如果索引不能完全放在内存,一旦出现随机读写比较高的时候,就会频繁地进行磁盘交换,MongoDB 的性能就会急剧下降

        3、占用的空间很大,因为它属于典型空间换时间原则的类型。那么它的磁盘空间比普通数据库会浪费一些,而且到目前为止它还没有实现在线压缩功能,

在 MongoDB 中频繁的进行数据增删改时,如果记录变了,例如数据大小发生了变化,这时候容易产生一些数据碎片,出现碎片引发的结果,

        一个是索引会出现性能问题,

        另外一个就是在一定的时间后,所占空间会莫明其妙地增大,所以要定期把数据库做修复,定期重新做索引,这样会提升MongoDB 的稳定性和效率。

在最新的版本里,它已经在实现在线压缩,估计应该在2.0版左右,应该能够实现在线压缩,可以在后台执行现在repair DataBase 的一些操作。如果那样,就解决了目前困扰我们的大问题。

        4、MongoDB 对数据间的事务关系支持比较弱

        5、运维不方便
MongoDB 相对于MySQL的优势

        1. 适合那些对数据库具体数据格式不明确或者数据库数据格式经常变化的需求模型,而且对开发者十分友好。

        2.自带一个分布式文件系统,可以很方便地部署到服务器机群上。

        MongoDB 里有一个Shard的概念,就是方便为了服务器分片使用的。每增加一台Shard,MongoDB 的插入性能也会以接近倍数的方式增长,磁盘容量也很可以很方便地扩充。

        3. 自带了对map-reduce运算框架的支持,这也很方便进行数据的统计。类似于group by

        MongoDB与MySQL命令对比 传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,

        MongoDB 是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。

        MongoDB 对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式*的特点。
MongoDB 和 Redis 的区别:
简介

        MongoDB 更类似MySQL,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询 JSON 数据,能存储海量数据,但是不支持事务。

        MySQL在大数据量时效率显著下降,MongoDB 更多时候作为关系数据库的一种替代。
内存管理机制

        Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。

        MongoDB 数据存在内存,由 linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
支持的数据结构

        Redis 支持的数据结构丰富,包括hash、set、list等。

        MongoDB 数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。
性能

        二者性能都比较高,应该说都不会是瓶颈。
可靠性

        二者均支持持久化。
集群

        MongoDB 集群技术比较成熟,Redis从3.0开始支持集群。
不适用的场景

        需要使用复杂sql的操作

        事务性系统

        下面是MongoDB 和Redis的对比图:

78c207bfa0264fbbb18f147da26a05aa.png
MySQL 与Redis 的区别:

        MySQL 是持久化存储,存放在磁盘里面,检索的话,会涉及到一定的 IO,为了解决这个瓶颈,于是出现了缓存,比如现在用的最多的 memcached(简称mc)。首先,用户访问mc,如果未命中,就去访问 MySQL,之后像内存和硬盘一样,把数据复制到mc一部分。

Redis 和mc都是缓存,并且都是驻留在内存中运行的,这大大提升了高数据量web访问的访问速度。然而mc只是提供了简单的数据结构,比如 string存储;Redis却提供了大量的数据结构,比如string、list、set、hashset、sorted set这些,这使得用户方便了好多,毕竟封装了一层实用的功能,同时实现了同样的效果,当然用Redis而慢慢舍弃mc。

        内存和硬盘的关系,硬盘放置主体数据用于持久化存储,而内存则是当前运行的那部分数据,CPU访问内存而不是磁盘,这大大提升了运行的速度,当然这是基于程序的局部化访问原理

        推理到 Redis + MySQL,它是内存+磁盘关系的一个映射,MySQL 放在磁盘,Redis放在内存,这样的话,web应用每次只访问Redis,如果没有找到的数据,才去访问 MySQL。

        然而 Redis + MySQL 和内存+磁盘的用法最好是不同的。

        前者是内存数据库,数据保存在内存中,当然速度快。

        后者是关系型数据库,功能强大,数据访问也就慢。

        像memcache,MongoDB,Redis,都属于No SQL系列。

        不是一个类型的东西,应用场景也不太一样,还是要看具体的需求来决定。

国产数据库

1:南大通用

   公司简介 

       天津南大通用数据技术有限公司(以下简称南大通用)是专注于数据库领域,国内领先的新型数据库产品和解决方案供应商,为数据分析、数据挖掘、商业智能、海量数据管理。

       数据安全等细分市场提供具有国际先进技术水平的数据库产品。南大通用已经形成了在大规模、高性能、分布式、高安全的数据存储、管理和应用方面的技术储备,同时对于数据整合、应用系统集成、PKI安全等方面具有丰富的应用开发经验。南大通用将以数据管理为核心竞争力,依据自主研发和引进先进技术相结合的方针,不断研发科技含量高、附加值较大、市场急需的具有自主知识产权的软件产品,实践技术最为先进,产品最为实用,市场份额最大的国产数据管理软件和数据服务的*。

数据库选型、Oracle 、Mysql、Redis、MSSQL、Access和国产数据库
 
 
Redis: 分布式缓存,用来存session, 页面权限,系统参数缓存等。速度快,适合做缓存。mongodb: 通过字段冗余,减少跨表查询,数据可支持横向发展,不支持事务,对数据性能要求高,对数据安全性要求不高。Oracle: 支持事务 数据安全性高 。Oracle不能存数组,只能存字符串,mongodb却可以存数组,但是查询会比较麻烦。
相同点:  都是关系型数据库管理系统           都是目前流行的数据库不同点:oracle是重量级型数据库,收费,对oracle数据库有任何的服务,支持大并发,大访问量,是oltp(on-line transaction procession联机事务处理系统)最好的工具,闭源mysql是轻量型数据库,免费,没有服务恢复数据 开源,o代表了oracle,m代表了mysql1.单引号的处理】m可以用双引号包起字符串,o只能用单引号包起字符串,在插入和更改字符串的必须做单引号的替换,把所有出现一个单引号替换成两个单引号2.自动增长的数据类型处理】mysql是一个提供自增,oracle不支持自增,需要建立一个自动增长的序列号,来完成3.sql语句的扩展和灵活性】(分页,主键的自增,单引号)m对sql语句有很多非常实用方便的扩展,比如limit inset可以一次插入多行数据,select某些管理数据可以不加from。o在这一方面比较稳重传统一些,严格4.事务提交的方式】o默认不自动提交,需要用户手动提交,支持事务m默认自定提交,不支持事务5.字段m的非空字段有空的内容,o里定义了非空字段就不容许有空的内容,按MYSQL的NOT NULL来定义Oracle是is null6.内存】o占用内存空间大m占有小。7.线程】m是单进程多线程,o是多进程(在Windows下也是在单进程),Windows下只能使用一个用户,或者进行不同用户之间的切换,Linux是对多用户或者相同用户可以同时连接操作系统,Redis:(非关系型数据库)是一个基于内存高性能的key-value数据库数据类型:string字符串,hash哈希,list列表。zset有序集合,set集合优点: 速度快,因为数据存在内存支持丰富的数据类型支持事务,操作都是原子性丰富的特性:可用于缓存,消息,持久化

2:武汉达梦

    公司简介

       武汉达梦数据库有限公司成立于2000年,为国有控股的基础软件企业,专业从事达梦数据库为中国数据库标准委员会组长单位,得到了国家各级*的强力支持。

      公司是国家规划布局内重点软件企业,首批获得国家“双软”认证的高新技术企业,“AAA”资信企业,并通过ISO9001:2000版国际质量管理体系认证国家秘密的计算机信息系统集成资质”认证、工业和信息化部“计算机信息系统集成企业资质” 二级认证。
      公司先后完成了近60项*、信息服务业最具潜力企业,并荣获“中国软件明星奖”。达梦数据库管理系统多次被评为中国优秀软件产品。
 
数据库选型、Oracle 、Mysql、Redis、MSSQL、Access和国产数据库
 
 
Redis: 分布式缓存,用来存session, 页面权限,系统参数缓存等。速度快,适合做缓存。mongodb: 通过字段冗余,减少跨表查询,数据可支持横向发展,不支持事务,对数据性能要求高,对数据安全性要求不高。Oracle: 支持事务 数据安全性高 。Oracle不能存数组,只能存字符串,mongodb却可以存数组,但是查询会比较麻烦。
相同点:  都是关系型数据库管理系统           都是目前流行的数据库不同点:oracle是重量级型数据库,收费,对oracle数据库有任何的服务,支持大并发,大访问量,是oltp(on-line transaction procession联机事务处理系统)最好的工具,闭源mysql是轻量型数据库,免费,没有服务恢复数据 开源,o代表了oracle,m代表了mysql1.单引号的处理】m可以用双引号包起字符串,o只能用单引号包起字符串,在插入和更改字符串的必须做单引号的替换,把所有出现一个单引号替换成两个单引号2.自动增长的数据类型处理】mysql是一个提供自增,oracle不支持自增,需要建立一个自动增长的序列号,来完成3.sql语句的扩展和灵活性】(分页,主键的自增,单引号)m对sql语句有很多非常实用方便的扩展,比如limit inset可以一次插入多行数据,select某些管理数据可以不加from。o在这一方面比较稳重传统一些,严格4.事务提交的方式】o默认不自动提交,需要用户手动提交,支持事务m默认自定提交,不支持事务5.字段m的非空字段有空的内容,o里定义了非空字段就不容许有空的内容,按MYSQL的NOT NULL来定义Oracle是is null6.内存】o占用内存空间大m占有小。7.线程】m是单进程多线程,o是多进程(在Windows下也是在单进程),Windows下只能使用一个用户,或者进行不同用户之间的切换,Linux是对多用户或者相同用户可以同时连接操作系统,Redis:(非关系型数据库)是一个基于内存高性能的key-value数据库数据类型:string字符串,hash哈希,list列表。zset有序集合,set集合优点: 速度快,因为数据存在内存支持丰富的数据类型支持事务,操作都是原子性丰富的特性:可用于缓存,消息,持久化

3:人大金仓

   公司简介

      北京人大金仓信息技术股份有限公司(简称:人大金仓)是中国自主研发数据库产品和数据管理解决方案的领导企业,由中国人民大学及一批最早在国内开展数据库教学、研究与开发的专家于1999年发起创立,至今已成功获得中国电子科技集团(CETC)旗下的普华基础软件股份有限公司和太极计算机股份有限公司的战略注资,被纳入CETC集团的整体发展战略。目前,公司研发人员超过60%,员工中90%以上具有大学本科以上学历,博士、硕士比例超过30%。

人大金仓长期致力于研发和推广具有自主知识产权的国产数据库管理系统。自成立以来,依托中国人民大学数据与知识工程研究所在数据库技术领域长期教学科研的深厚积累,人大金仓先后被认定为北京软件产业基地人大金仓数据库产业化中心、教育部数据库与商务智能工程研究中心和中关村科技园区百家创新试点企业。在数据库信息安全领域,人大金仓成功通过二级军工保密资格认证。在内部研发体系方面,人大金仓全面推行ISO9001质量管理体系,并通过了软件能力成熟度CMM2级评估,为公司开发高水平高质量的大型系统软件产品、向用户提供优质满意的服务,提供了制度和能力上的保证。
人大金仓成功承担了国家十五“863”数据库重大专项课题“通用数据库管理系统KingbaseES研发及其应用”和北京市科技计划重大项目“大型通用数据库管理系统研制”等重大数据库项目研发任务。金仓数据库KingbaseES是入选国家自主创新产品目录的唯一数据库产品,同时还入选了北京市和中关村科技园区自主创新产品目录,曾获得北京市科技进步一等奖。目前,金仓数据库KingbaseES在*、军队、电力、农业、水利、质检、教育、金融、能源、制造业信息化等领域拥有一大批成功应用案例。在**组织部的全国组织系统信息化、国家电网、新华保险信息化建设和北京市及下属30多个委办局和区县的电子政务应用中,金仓数据库KingbaseES都发挥了重要支撑作用。在质监行业中,人大金仓是唯一入选国家“金质”工程的国产数据库厂商,在审计行业,人大金仓的数据库产品成功应用于国家“金审”工程二期。
人大金仓是国家“核高基”重大专项数据库方向课题的牵头承担单位,在国产数据库领域,人大金仓市场份额始终保持领先。

4:神舟通用

  公司简介

       天津神舟通用数据技术有限公司(简称:神舟通用公司)致力于神通国产数据库产业化,隶属中国航天科技集团公司,是国内最具影响力的基础软件企业之一,获得国家核高基科技重大专项重点支持。神舟通用公司提供神通数据库系列产品与服务,产品技术领先,先后获得30项数据库技术发明专利,在国产数据库行业处于领先位置。公司拥有北京研发中心、天津研发中心、杭州研发中心三家产品研发基地,与浙江大学、北航、北京大学、中科院软件所等高校和科研院所开展了深度合作,具有一大批五年以上的数据库核心研发人才。


        神舟通用公司主营业务主要包括神通关系型通用数据库、神通KStore海量数据管理系统、神通xCluster集群件、神通商业智能套件等系列产品研发和市场销售。基于产品组合,可形成支持交易处理、MPP数据库集群、数据分析与处理等解决方案。公司拥有40余名实战经验丰富的中高级数据库技术服务人员,可提供数据库系统调优和运维服务。公司客户主要覆盖*、电信、能源、交通、网安、国防和军工等领域,率先实现国产数据库在电信行业的大规模商用。

 数据库选型、Oracle 、Mysql、Redis、MSSQL、Access和国产数据库
 
 
Redis: 分布式缓存,用来存session, 页面权限,系统参数缓存等。速度快,适合做缓存。mongodb: 通过字段冗余,减少跨表查询,数据可支持横向发展,不支持事务,对数据性能要求高,对数据安全性要求不高。Oracle: 支持事务 数据安全性高 。Oracle不能存数组,只能存字符串,mongodb却可以存数组,但是查询会比较麻烦。
相同点:  都是关系型数据库管理系统           都是目前流行的数据库不同点:oracle是重量级型数据库,收费,对oracle数据库有任何的服务,支持大并发,大访问量,是oltp(on-line transaction procession联机事务处理系统)最好的工具,闭源mysql是轻量型数据库,免费,没有服务恢复数据 开源,o代表了oracle,m代表了mysql1.单引号的处理】m可以用双引号包起字符串,o只能用单引号包起字符串,在插入和更改字符串的必须做单引号的替换,把所有出现一个单引号替换成两个单引号2.自动增长的数据类型处理】mysql是一个提供自增,oracle不支持自增,需要建立一个自动增长的序列号,来完成3.sql语句的扩展和灵活性】(分页,主键的自增,单引号)m对sql语句有很多非常实用方便的扩展,比如limit inset可以一次插入多行数据,select某些管理数据可以不加from。o在这一方面比较稳重传统一些,严格4.事务提交的方式】o默认不自动提交,需要用户手动提交,支持事务m默认自定提交,不支持事务5.字段m的非空字段有空的内容,o里定义了非空字段就不容许有空的内容,按MYSQL的NOT NULL来定义Oracle是is null6.内存】o占用内存空间大m占有小。7.线程】m是单进程多线程,o是多进程(在Windows下也是在单进程),Windows下只能使用一个用户,或者进行不同用户之间的切换,Linux是对多用户或者相同用户可以同时连接操作系统,Redis:(非关系型数据库)是一个基于内存高性能的key-value数据库数据类型:string字符串,hash哈希,list列表。zset有序集合,set集合优点: 速度快,因为数据存在内存支持丰富的数据类型支持事务,操作都是原子性丰富的特性:可用于缓存,消息,持久化

具体想深入学习的朋友,可能自己私底下还得下点功夫了,在语法上与之前用的Oracle,Mysql大同小异!

 数据库选型、Oracle 、Mysql、Redis、MSSQL、Access和国产数据库
 
 
Redis: 分布式缓存,用来存session, 页面权限,系统参数缓存等。速度快,适合做缓存。mongodb: 通过字段冗余,减少跨表查询,数据可支持横向发展,不支持事务,对数据性能要求高,对数据安全性要求不高。Oracle: 支持事务 数据安全性高 。Oracle不能存数组,只能存字符串,mongodb却可以存数组,但是查询会比较麻烦。
相同点:  都是关系型数据库管理系统           都是目前流行的数据库不同点:oracle是重量级型数据库,收费,对oracle数据库有任何的服务,支持大并发,大访问量,是oltp(on-line transaction procession联机事务处理系统)最好的工具,闭源mysql是轻量型数据库,免费,没有服务恢复数据 开源,o代表了oracle,m代表了mysql1.单引号的处理】m可以用双引号包起字符串,o只能用单引号包起字符串,在插入和更改字符串的必须做单引号的替换,把所有出现一个单引号替换成两个单引号2.自动增长的数据类型处理】mysql是一个提供自增,oracle不支持自增,需要建立一个自动增长的序列号,来完成3.sql语句的扩展和灵活性】(分页,主键的自增,单引号)m对sql语句有很多非常实用方便的扩展,比如limit inset可以一次插入多行数据,select某些管理数据可以不加from。o在这一方面比较稳重传统一些,严格4.事务提交的方式】o默认不自动提交,需要用户手动提交,支持事务m默认自定提交,不支持事务5.字段m的非空字段有空的内容,o里定义了非空字段就不容许有空的内容,按MYSQL的NOT NULL来定义Oracle是is null6.内存】o占用内存空间大m占有小。7.线程】m是单进程多线程,o是多进程(在Windows下也是在单进程),Windows下只能使用一个用户,或者进行不同用户之间的切换,Linux是对多用户或者相同用户可以同时连接操作系统,Redis:(非关系型数据库)是一个基于内存高性能的key-value数据库数据类型:string字符串,hash哈希,list列表。zset有序集合,set集合优点: 速度快,因为数据存在内存支持丰富的数据类型支持事务,操作都是原子性丰富的特性:可用于缓存,消息,持久化