nosql使用感受
2024-08-31 20:29:52
最近一个项目尝试了使用ssdb(一个类似于redis的数据结构数据库),主要感受有几点:
- 优势
- nosql的无模式在修改和插入时很方便,不需要预先新建表或者修改表结构来新加字段,只需要代码里面使用就行。
- nosql的速度非常快,而且一般有自动过期机制,而一般web服务器都是无状态的,用nosql作缓存来配合极其方便,这也是大部分的使用场景。
- 架设简单,协议也非常简单,可以自己很轻易的写一个客户端。
- 提供的一些数据结构,可以极大的简化一些常见需求的实现(如排行榜)。
- 劣势
- 没有sql语句,提供的客户端工具只支持简单的单个指令执行。这导致了几乎任何一个分析或者修改的需求,都需要写程序来实现。
- 没有模式,很多批量修改的场景只能用遍历判断来代替。
- 某些实现(如ssdb)为了实现简便,对返回数据的大小有限制,这导致了遍历还必须分段进行,结合1、2,进一步增加了统计分析的工作量和难度。
- 没有事务和锁支持,在某些场景下使用存在问题(redis有一个简单的队列事务支持)。我利用setnx实现了一个乐观锁,用incr指令代替了大部分的set指令来实现原子加/减,但事务在很多严谨的情况下还是必要的。
- 没有redo log,不能按时间点备份或回档,只能全量备份。
总结:nosql非常适合缓存这种纯粹的kv存储(尤其是不需要遍历的场景),也比较适合一些频繁修改的实时应用,和一些特殊的场景(如排行榜),但不利于统计分析和修改。因此可以考虑把nosql只用于缓存,或者用于存储的同时,在写入数据时同时把统计数据写到一个rds中,以便在之后利用强大的sql语句来做统计分析。
最新文章
- Count the number of possible triangles
- ios htttp网络请求cookie的读取与写入(NSHTTPCookieStorage)
- 小结MapReduce 程序的流程及设计思路
- iOS返回一个前面没有0,小数点后保留两位的数字字符串
- 用数组取到当前栈内的ViewController 并根据下标取某个ViewController
- 最简单的可取消多选效果(以从水果篮中挑选水果为例)【jsDEMO】
- maven的环境搭建
- 2016 - 1- 23 iOS中xml解析 (!!!!!!!有坑要解决!!!!!!)
- python数据结构与算法——队列
- Ubuntu下PHP的扩展
- java使用HttpURLConnection和HttpClient分别模拟get和post请求以及操作cookies
- 【No.3 Ionic】超级逗表情 App
- 如何提高手机APP的用户体验?
- 【补】【FZU月赛】【20150515】【待续】
- Unity3D基础学习 NGUI Example 7-Scroll View(Panel)制作固定包裹栏,点击传递参数显示物体
- 提高你的Java代码质量吧:小心switch带来的空值异常
- C、C++中“*”操作符和“后++”操作符的优先级
- DOM基础(三)
- java iframe 嵌套,session失效重新登录页面嵌套问题
- [51nod1610]路径计数