通常来说,我们应该使用应用的特性而不是自己的爱好或者规定而去选择一种合适的组件,选择的标准应该是这个组件最适合或者本身其设计就是为了解决这个问题,而不是这个组件能够做这事情为标准。就拿存储来说,任何时候,我们都有至少文本文件、SQL数据库、文档数据库或者k/v方式来实现。在我们的一个监控MQ积压的系统中,我们有数十个线上MQ实例跑着几十个金融交易系统的行情和其他关键推送服务,为了在客户尚未感知的情况下我们可以知道每个系统的整体运行情况,为此笔者做了一个最简单的web应用,有增删改服务器、MQ队列积压的监控,因为不想使用mysql导致维护一堆表结构,还得定期升级给运维使用,于是选择了使用redis(append每秒1次)作为存储(本来考虑过使用mongodb,但因为redis相对于mongodb,太小巧),几个月以来,系统运行的很好,一有问题屏幕就会有红色提醒。突然有一天,我们要改个需求,于是笔者让新员工去改,因为一直都是用的本地redis,所以线上的也没有配置密码在运行,因为这个新员工毫无经验,于是我让他去找运维,配置下密码,比较背的是,运维也没有什么经验,在redis.conf更改了密码之后,直接kill的redis进程,启动的时候发现本来的append.log文件也被删除了,于是所有的配置都丢了。

就这个事情本身来说,redis本身并没有什么错,但是我们大部分人通常会认为redis只是缓存,重启后也不会假设其中有持久化的数据,所以日常性的维护很有可能根据惯例进行。从这件事可以看出,选择一个组件的时候,最好还是让最合适的组件做合适的事,尽可能避免不必要的不小心,毕竟整个公司/项目/部门不仅仅只有当事人自己,还有各种周边人员会参与,甚至很有可能决策者只是个发起者,所以一定不要做出乎意料的事情。

言归正传,有些时候,虽然数据是结构化的,但是如果我们实在不想拘泥于rdbms的强结构,并且多一个字段、少一个字段并不会造成系统不可用,而仅仅是丢失了一些信息时,从效益比的角度来说,这个时候选择文档存储可能是合理的。当然,如果数据量巨大、对稳定性或者对性能有极端要求,这个时候必须专门考虑。

虽然,当前postgresql、mysql都支持json了,但是毕竟他们不是nosql为主战场,如果只是简单的应用,没有必要非把rdbms扯进来把事情复杂化。

https://www.vividcortex.com/blog/2015/06/02/json-support-postgres-mysql-mongodb-sql-server/

https://mariadb.com/resources/blog/json-with-mariadb-10-2/

https://oracle-base.com/articles/12c/json-support-in-oracle-database-12cr1

mongodb

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似jsonbson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
*面向集合存储,易存储对象类型的数据。
*模式自由。
*支持动态查询
*支持完全索引,包含内部对象。
*支持查询。
*支持复制和故障恢复。
*使用高效的二进制数据存储,包括大型对象(如视频等)。
*自动处理碎片,以支持云计算层次的扩展性。
*支持RUBYPYTHONJAVAC++PHPC#等多种语言。
*文件存储格式为BSON(一种JSON的扩展)。
*可通过网络访问。

mongodb性能测试

https://www.cnblogs.com/wyett/p/7464332.html

一些应该使用mongodb或者其他文档存储而不是redis或mysql、oracle json的情形(最近更新场景)的更多相关文章

  1. linux下,MySQL默认的数据文档存储目录为/var/lib/mysql。

    0.说明 Linux下更改yum默认安装的mysql路径datadir. linux下,MySQL默认的数据文档存储目录为/var/lib/mysql. 假如要把MySQL目录移到/home/data ...

  2. NoSQL生态系统——类似Bigtable列存储,或者Dynamo的key存储(kv存储如BDB,结构化存储如redis,文档存储如mongoDB)

    摘自:http://www.ituring.com.cn/article/4002# NoSQL系统的数据操作接口应该是非SQL类型的.但在NoSQL社区,NoSQL被赋予了更具有包容性的含义,其意为 ...

  3. MongoDB的学习--文档的插入、删除和更新

    最近在看<MongoDB权威指南>,写博客记录一下相关内容~~ 关于安装之类的最基本的就不多说了,从基本操作增删改查开始. MongoDB官网地址:http://www.mongodb.o ...

  4. Mongodb:修改文档结构后出现错误:Element '***' does not match any field or property of class ***.

    Mongodb:修改文档结构后出现错误:Element '***' does not match any field or property of class ***. Mongodb是一种面向文档的 ...

  5. SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”

    一.简介 spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...

  6. 分布式文档存储数据库之MongoDB基础入门

    一.MongoDB简介 MongoDB是用c++语言开发的一款易扩展,易伸缩,高性能,开源的,schema free 的基于文档的nosql数据库:所谓nosql是指不仅仅是sql的意思,它拥有部分s ...

  7. MongoDB_文档存储结构(三)

    MongoDB 文档数据库的存储结构分为四个层次,从大到小依次是:数据库(database).集合(collection).文档(document).键值对. 图 1 描述了 MongoDB 与 My ...

  8. ElasticSearch 5学习(8)——分布式文档存储(wait_for_active_shards新参数分析)

    学完ES分布式集群的工作原理以及一些基本的将数据放入索引然后检索它们的所有方法,我们可以继续学习在分布式系统中,每个分片的文档是被如何索引和查询的. 路由 首先,我们需要明白,文档和分片之间是如何匹配 ...

  9. ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理

    分布式文档存储 ES分布式特性 屏蔽了分布式系统的复杂性 集群内的原理 垂直扩容和水平扩容 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中 ES集群特点 ...

随机推荐

  1. HOJ 1444 Humble Numbers

    Humble Numbers My Tags (Edit) Source : University of Ulm Internal Contest 1996 Time limit : 1 sec Me ...

  2. ASP.NET MVC中ViewBag和ViewData的区别

    在MVC3.0以上我们会用到ViewBag或者ViewData进行页面传值,对比一下二者的差距: ViewData ViewBag 基于key/value的字典集合 dynamic类型对象 从ASP. ...

  3. POJ 2398 - Toy Storage - [计算几何基础题][同POJ2318]

    题目链接:http://poj.org/problem?id=2398 Time Limit: 1000MS Memory Limit: 65536K Description Mom and dad ...

  4. JavaScript简介与使用方法

    1.JavaScript简介 1.1.JavaScript简史 最初:网络通信很慢,网页上的数据要传送到数据库验证,然后再返回错误结果,找客观过程要等很久,于是,网景公司开发出一门新语言,当时Java ...

  5. SPOJ - DWARFLOG Manipulate Dwarfs 线段树+想法题;

    题意:给你2e5个矮人,编号1~N.有2e5个操作:操作1 读取x,y,交换编号为x,y的矮人.操作2 读取AB 判断编号为A,A+1····B的矮人是否连续(不必有序). 题解:首先用pos[i]保 ...

  6. 没有动态库链接:可执行的文件大小一个就有几百兆 Dynamic-Link Libraries

    dynamic link library Dynamic-Link Libraries (Windows) https://msdn.microsoft.com/en-us/library/windo ...

  7. CH0102 64位整数乘法 数论

    正解:数论/一个神仙想法 解题报告: 先放传送门qwq 两种方法,都还挺妙的就都写了qwq 第一种是快速幂 把b用二进制表示成,ck*2k+ck-1*2k-1+...+c0*20 然后就可以表示成,a ...

  8. requests库的get请求,带有cookies

    (一)如何带cookies请求 方法一:headers中带cookies #coding:utf-8 import requests import re # 构建url url = 'http://w ...

  9. CentOS工作内容(一)CentOS6.4的安装 hwclock和date

    CentOS工作内容(一)CentOS6.4的安装 hwclock和date 光碟安装 分配20G磁盘空间 插入光碟 选择第一项安装 如果要急救的话请选择第三项 启动安装进程 跳过光碟检测 选择nex ...

  10. Spark-2.0原理分析-shuffle过程

    shuffle概览 shuffle过程概览 shuffle数据流概览 shuffle数据流 shuffle工作流程 在运行job时,spark是一个stage一个stage执行的.先把任务分成stag ...