最近一个项目尝试了使用ssdb(一个类似于redis的数据结构数据库),主要感受有几点:

  • 优势
  1. nosql的无模式在修改和插入时很方便,不需要预先新建表或者修改表结构来新加字段,只需要代码里面使用就行。
  2. nosql的速度非常快,而且一般有自动过期机制,而一般web服务器都是无状态的,用nosql作缓存来配合极其方便,这也是大部分的使用场景。
  3. 架设简单,协议也非常简单,可以自己很轻易的写一个客户端。
  4. 提供的一些数据结构,可以极大的简化一些常见需求的实现(如排行榜)。
  • 劣势
  1. 没有sql语句,提供的客户端工具只支持简单的单个指令执行。这导致了几乎任何一个分析或者修改的需求,都需要写程序来实现。
  2. 没有模式,很多批量修改的场景只能用遍历判断来代替。
  3. 某些实现(如ssdb)为了实现简便,对返回数据的大小有限制,这导致了遍历还必须分段进行,结合1、2,进一步增加了统计分析的工作量和难度。
  4. 没有事务和锁支持,在某些场景下使用存在问题(redis有一个简单的队列事务支持)。我利用setnx实现了一个乐观锁,用incr指令代替了大部分的set指令来实现原子加/减,但事务在很多严谨的情况下还是必要的。
  5. 没有redo log,不能按时间点备份或回档,只能全量备份。

总结:nosql非常适合缓存这种纯粹的kv存储(尤其是不需要遍历的场景),也比较适合一些频繁修改的实时应用,和一些特殊的场景(如排行榜),但不利于统计分析和修改。因此可以考虑把nosql只用于缓存,或者用于存储的同时,在写入数据时同时把统计数据写到一个rds中,以便在之后利用强大的sql语句来做统计分析。

nosql使用感受的更多相关文章

  1. NoSql数据库使用半年后在设计上面的一些心得

    NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...

  2. NoSQL与RDBMS的九点区别联系

    原文链接:http://blog.sina.com.cn/s/blog_5373fb0b0101ft8a.html     1 理解ACID与BASE的区别(ACID是关系型数据库强一致性的四个要求, ...

  3. [转载]NoSQL数据库的基础知识

    关系型数据库和NoSQL数据库 什么是NoSQL 大家有没有听说过“NoSQL”呢?近年,这个词极受关注.看到“NoSQL”这个词,大家可能会误以为是“No!SQL”的缩写,并深感愤怒:“SQL怎么会 ...

  4. NoSql数据库使用半年后在设计上面的一些心得 (转)

    http://www.cnblogs.com/AllenDang/p/3507821.html NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我 ...

  5. NoSql数据库使用

    NoSql数据库使用半年后在设计上面的一些心得 NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么 ...

  6. CouchBase数据库-一个较新的、发展迅速的nosql数据库技术

    couchbase是一个较新的.发展迅速的nosql数据库技术.2014年,viber宣布使用couchbase替换mongodb,以适应10亿级的用户量,目前,couchbase已大量运用于生产环境 ...

  7. 学习mongoDB的一些感受(转自:http://blog.csdn.net/liusong0605/article/details/11581019)

    曾经使用过mongoDB来保存文件,最一开始,只是想总结一下在开发中如何实现文件与mongoDB之间的交互.在此之前,并没有系统的了解过mongoDB,虽然知道我们用它来存储文件这些非结构化数据,但是 ...

  8. redis for windows之nosql还需要入门?

    RT:nosql给很多人的感觉就是上手特别快,本文也是一篇入门级的,哎~~ 又写了一篇没有卵用的博文,姑且把它当作一篇文档吧,还是没有发布/订阅.事件...等介绍的一篇残缺文档,幸好废话不是很多,凑合 ...

  9. 【MongoDB】NoSQL Manager for MongoDB 教程(进阶篇)

    项目做完,有点时间,接着写下第二篇吧.回顾戳这里  基础篇:安装.连接mongodb.使用shell.增删改查.表复制 本文属于进阶篇,为什么叫进阶篇,仅仅是因为这些功能属于DB范畴,一般使用的不多, ...

随机推荐

  1. !important的理解

    !important用于将当前css代码优先级提升为最高,这个优先级比行内样式更高 但是!important在ie6这种垃圾浏览器下会出现小bug .testClass{ color:blue !im ...

  2. 封装OkHttp,通过Callback改造Callback实现

    1:实现Callback回调接口import android.os.Handler;import android.os.Looper;import android.os.Message;import ...

  3. 《剑指offer》— JavaScript(18)二叉树的镜像

    二叉树的镜像 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 相关知识 二叉树的镜像定义: 源二叉树 镜像二叉树 思路 有关二叉树的算法问题,一般都可以通过递归来解决.那么写一个正确的递归程序 ...

  4. HTML5 DragEvent

    DragEvent是一个表示drag和drop交互的DOM event接口.用户通过将指针设备(如:鼠标)放在目标的表面开始拖动,然后拖动指针到一个新的位置(如其他DOM元素).应用程序自动的解析拖放 ...

  5. Mac入门推荐(写给Mac小白)

    本人第一次接触Mac是在2016年10月中旬,那时由于对苹果系统的不熟悉,导致自己一开始的时候用的很不习惯,甚至还想换回Windows系统.总所周知,苹果系统的软件比较少,在此我向大家推荐一些个人觉得 ...

  6. 学习接水系统(java+thread线程)

    (一)项目框架分析 对于学生并发接水项目,根据面向对象的思想,需要创建两个对象,即学生和水龙头. 接下来主要讲解不排队接水和排队接水两张情况. 项目的目录文件如下: (二)不排队接水 假设有四个学生小 ...

  7. 每天一个Linux命令(14)--head命令

    head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然的就是查看档案的结尾啦. 1.命令格式: h ...

  8. Spring+SpringMVC+MyBatis+easyUI整合基础篇(八)mysql中文查询bug修复

    写在前面的话 在测试搜索时出现的问题,mysql通过中文查询条件搜索不出数据,但是英文和数字可以搜索到记录,中文无返回记录.本文就是写一下发现问题的过程及解决方法.此bug在第一个项目中点这里还存在, ...

  9. QT 中使用 c++ 的指针

    之前没有接触过 c++,不过听说 c++ 的指针很坑,直到最近在用 QT / C++ 写一个 Linux Deepin 系统上检测网络流量和网速的小程序时,发现 c++ 的指针用起来真的特别蛋疼. 不 ...

  10. ConfigParser-- 读取写入配置文件

    基础读取配置文件   -read(filename)               直接读取文件内容 -sections()                      得到所有的section,并以列表 ...