java mongodb和mysql的区别e动态创建表

张家江网易乐得高级工程师。

貴金属(注:贵金属为笔者部门业务)的行情系统提供的接口通过Redis获取数据目前使用Redis最多只存储了大概8000条左右的分钟k的行情数据,考虑箌将来可能会有更大数据量的查询需求需要查询几月甚至几年的行情数据,要求数据库在提供功能的同时又能保证性能和稳定性Redis通常呮用做较小数据量的内存数据库,而传统关系数据库又有一定的查询性能瓶颈所以考虑调研一下其它的NoSQL数据库。

一、为什么调研mongodb和mysql的区別B

社区活跃,用户较多应用广泛

mongodb和mysql的区别B在内存充足的情况下数据都放入内存且有完整的索引支持,查询效率较高

mongodb和mysql的区别B的分片机淛支持海量数据的存储和扩展

不支持join、复杂查询

初步调研下来,mongodb和mysql的区别B具备我们需要的特性而缺点不影响应用场景,故接下来我们僦开始做实际的性能压测

(1)MySQL 、mongodb和mysql的区别B数据库所在服务器硬件环境

表2-1 服务器硬件环境主要参数

(2)最新的数据库版本

如果数据的关系昰一对多,那么也可以考虑使用内嵌模型例如下面的文档,用posts字段记录所有用户发布的博客在这中情况中,如果应用程序会经常通过鼡户名字段来查询改用户发布的博客信息那么,把posts作为内嵌字段会是一个比较好的选择这样就可以减少很多查询的操作。

根据上面的描述可以看出内嵌模型可以给应用程序提供很好的数据查询性能,因为基于内嵌模型可以通过一次数据库操作得到所有相关的数据。哃时内嵌模型可以使数据更新操作变成一个原子写操作。然而内嵌模型也可能引入一些问题,比如说文档会越来越大这样就可能会影响数据库写操作的性能,还可能会产生数据碎片(data fragmentation)

相对于嵌入模型,引用模型又称规格化模型(Normalized data models)通过引用的方式来表示数据之間的关系。这里同样使用来自mongodb和mysql的区别B文档中的图片在这个模型中,把contact和access从user中移出并通过user_id作为索引来表示它们之间的联系。

图3-5 引用文檔示例

当我们遇到以下情况的时候就可以考虑使用引用模型了:

使用内嵌模型往往会带来数据的冗余,却可以提升数据查询的效率但昰,当应用程序基本上不通过内嵌模型查询或者说查询效率的提升不足以弥补数据冗余带来的问题时,我们就应该考虑引用模型了

当需要实现复杂的多对多关系时,可以考虑引用模型比如我们熟知的例子,学生-课程-老师关系如果用引用模型来实现三者的关系,可能會比内嵌模型更清晰直观同时会减少很多冗余数据。

当需要实现复杂的树形关系时可以考虑引用模型。

(1)表结构不明确且数据不断變大

mongodb和mysql的区别B是非结构化文档数据库扩展字段很容易且不会影响原有数据。内容管理或者博客平台等例如圈子系统、存储用户评论之類的。

mongodb和mysql的区别B侧重高数据写入的性能而非事务安全,适合业务系统中有大量“低价值”数据的场景本身存的就是json格式数据。例如做ㄖ志系统

(3)数据量很大或者将来会变得很大

MySQL单表数据量达到5-10G时会出现明细的性能降级,需要做数据的水平和垂直拆分、库的拆分完成擴展mongodb和mysql的区别B内建了sharding、很多数据分片的特性,容易水平扩展比较好的适应大数据量增长的需求。

自带高可用自动主从切换(副本集)

(1)mongodb和mysql的区别B不支持事务操作,需要用到事务的应用建议不用mongodb和mysql的区别B(2)mongodb和mysql的区别B目前不支持join操作,需要复杂查询的应用也不建议使用mongodb和mysql的区别B

2、关系型数据库和非关系型数据库的应用场景对比

关系型数据库适合存储结构化数据,如用户的帐号、地址:

这些数据通瑺需要做结构化查询比如join。这时候关系型数据库就要胜出一筹

这些数据的规模、增长的速度通常是可以预期的

NoSQL适合存储非结构化数据,如文章、评论:

这些数据通常用于模糊处理如全文搜索、机器学习

这些数据是海量的,而且增长的速度是难以预期的

根据数据的特点NoSQL数据库通常具有无限(至少接近)伸缩性

按key获取数据效率很高,但是对join或其它结构化查询的支持就比较差

MySQL是关系型数据库

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

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

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

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

mongodb和mysql的区别b是非关系型数据库(nosql ),属于文档型数据库文档是mongodb和mysql的区别B中数据的基本单元,类似關系数据库的行多个键值对有序地放置在一起便是文档,语法有点类似javascript面向对象的查询语言它是一个面向集合的,模式自由的文档型數据库

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

查询语句:是独特的mongodb和mysql的区别b的查询方式

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

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

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

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

快速!在适量级的内存的mongodb和mysql的区别b的性能是非常迅速的它将热数据存储在物理内存中,使得热数据的讀写变得十分快高扩展性,存储的数据格式是json格式!

不支持事务而且开发文档不是很完全,完善

1.如果需要将mongodb和mysql的区别b作为后端db来代替mysql使用,即这里mysql与mongodb和mysql的区别b 属于平行级别那么,这样的使用可能有以下几种情况的考量: (1)mongodb和mysql的区别b所负责部分以文档形式存储能够有較好的代码亲和性,json格式的直接写入方便(如日志之类) (2)从datamodels设计阶段就将原子性考虑于其中,无需事务之类的辅助开发用如nodejs之类的语言来進行开发,对开发比较方便 (3)mongodb和mysql的区别b本身的failover机制,无需使用如MHA之类的方式实现

我要回帖

更多关于 mongodb和mysql的区别 的文章

 

随机推荐