通常来说,我们应该使用应用的特性而不是自己的爱好或者规定而去选择一种合适的组件,选择的标准应该是这个组件最适合或者本身其设计就是为了解决这个问题,而不是这个组件能够做这事情为标准。就拿存储来说,任何时候,我们都有至少文本文件、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. CentOS6.5安装配置PPTP

    本次安装环境为Ucloud云服务器 1,操作系统版本检查 2,安装ppp,pptp yum install -y ppp rpm -ivh http://static.ucloud.cn/pptpd- ...

  2. HOJ 2156 &POJ 2978 Colored stones(线性动规)

    Colored stones Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1759 Accepted: 829 Descrip ...

  3. hihocoder 1330 - 数组重排 - [hiho一下167周][最小公倍数]

    题目链接:https://hihocoder.com/problemset/problem/1330 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi想知道,如果他 ...

  4. Python面试基础篇

    1. 为什什么学习Python? Life is short, You need Python 2. 通过什什么途径学习的Python? pass 3. Python和Java.PHP.C.C#.C+ ...

  5. js_加入收藏夹功能

    <script type="text/javascript">function addToFavorite(obj) {    var url = "http ...

  6. [vue]vue-cli下载原理

    正常vue-cli这样操作就ok了 vue-cli github $ npm install -g vue-cli $ vue init webpack my-project $ cd my-proj ...

  7. [py]django表单不清空实现的2种方法

    参考 参考: django实现内容不清空2种方法 django form的作用 1.生成html标签 2.验证输入内容 form生成表单 zhuji/forms.py - 实例化表单 - 定制form ...

  8. for和foreach的区别

    public class Program { public static void Main() { Program program = new Program(); program.For();// ...

  9. 搭建私有npm私库(使用verdaccio)

    搭建 npm 离线服务器 为什么要搭建npm 服务器 原因: 公司内部开发的私有包,统一管理,方便开发和使用 安全性,由于公司内部开发的模块和一些内容并不希望其他无关人员能够看到,但是又希望内部能方便 ...

  10. Vue.Js加入bootstrap及jquery,或加入其他插件vue-resource,vuex等

    .引入jquery 项目目录下输入 cnpm install jquery --save-dev      用npm下载jq依赖 若想加入其他js库,如vue-resource,执行命令cnpm in ...