最近一个项目尝试了使用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语句来做统计分析。

最新文章

  1. Count the number of possible triangles
  2. ios htttp网络请求cookie的读取与写入(NSHTTPCookieStorage)
  3. 小结MapReduce 程序的流程及设计思路
  4. iOS返回一个前面没有0,小数点后保留两位的数字字符串
  5. 用数组取到当前栈内的ViewController 并根据下标取某个ViewController
  6. 最简单的可取消多选效果(以从水果篮中挑选水果为例)【jsDEMO】
  7. maven的环境搭建
  8. 2016 - 1- 23 iOS中xml解析 (!!!!!!!有坑要解决!!!!!!)
  9. python数据结构与算法——队列
  10. Ubuntu下PHP的扩展
  11. java使用HttpURLConnection和HttpClient分别模拟get和post请求以及操作cookies
  12. 【No.3 Ionic】超级逗表情 App
  13. 如何提高手机APP的用户体验?
  14. 【补】【FZU月赛】【20150515】【待续】
  15. Unity3D基础学习 NGUI Example 7-Scroll View(Panel)制作固定包裹栏,点击传递参数显示物体
  16. 提高你的Java代码质量吧:小心switch带来的空值异常
  17. C、C++中“*”操作符和“后++”操作符的优先级
  18. DOM基础(三)
  19. java iframe 嵌套,session失效重新登录页面嵌套问题
  20. [51nod1610]路径计数

热门文章

  1. 一步一步在Windows中使用MyCat负载均衡 上篇
  2. JAVA设计模式:装饰模式
  3. nodemailer中的几个坑
  4. 使用 Bitbucket Pipelines 持续交付托管项目
  5. 页面添加数据的PHP
  6. JVM——深入分析对象的内存布局
  7. 数据库笔试面试题库(Oracle、MySQL等)
  8. H5微信播放全屏问题
  9. Java面试13|算法
  10. 消消乐、candy crush类三消游戏程序逻辑分析