[Point]
Sql[Point]
NoSql[Point]
缓存[Point]
数据一致性科班的同学可以了解一下数据库范式, 在 ElemeFe 面试不会问, 但是其他地方可能会问 (比如阿里).
SQL (Structured Query Language) 是关系式数据库管理系统的标准语言, 关于关系型数据库这里主要带大家看一下 Mysql 的几个问题
attr | MyISAM | InnoDB |
---|---|---|
Locking | Table-level | Row-level |
designed for | need of speed | high volume of data |
foreign keys | × (DBMS) | ✓ (RDBMS) |
transaction | × | ✓ |
fulltext search | ✓ | × |
scene | lots of select | lots of insert/update |
count rows | fast | slow |
auto_increment | fast | slow |
索引是用空间换时间的一种优化策略. 推荐阅读: mysql索引类型 以及 主键与唯一索引的区别
Monogdb 连接问题(超时/断开等)有可能是什么问题导致的?
populate
aggregate
pipeline
Cursor
整理中
备份数据库与 M/S, M/M 等部署方式的区别?
Google App Engine 的 co-founder Ryan Barrett 在 2009 年的 google i/o 上的演讲 《Transaction Across DataCenter》(视频: http://www.youtube.com/watch?v=srOgpXECblk)
根据上图, 我们可以知道 Master/Slave 与 Master/Master 的关系.
attr | Master/Slave | Master/Master |
---|---|---|
一致性 | Eventually:当你写入一个新值后,有可能读不出来,但在某个时间窗口之后保证最终能读出来。比如:DNS,电子邮件、Amazon S3,Google搜索引擎这样的系统。 | |
事务 | 完整 | 本地 |
延迟 | 低延迟 | |
吞吐 | 高吞吐 | |
数据丢失 | 部分丢失 | |
熔断 | 只读 | 读/写 |
读写分离是在 query 量大的情况下减轻单个 DB 节点压力, 优化数据库读/写速度的一种策略. 不论是 MySQL 还是 MongoDB 都可以进行读写分离.
读写分离的配置方式直接搜索一下 数据库名 + 读写分离
即可找到. 通常是 M/S 的情况, 使用 Master 专门写, 用 Slave 节点专门读. 使用读写分离时, 请确认读的请求对一致性要求不高, 因为从写库同步读库是有延迟的.
关于数据一致性推荐看陈皓的分布式系统的事务处理
什么情况下数据会出现脏数据? 如何避免?
为了数据的一致性, 这6件事, 要么都成功做完, 要么都不成功, 而且这个操作的过程中, 对A、B帐号的其它访问必需锁死, 所谓锁死就是要排除其它的读写操作, 否则就会出现脏数据 ---- 即数据一致性的问题.
这个问题并不仅仅出现在数据库操作中, 普通的并发以及并行操作都可能导致出现脏数据. 避免出现脏数据通常是从架构上避免或者采用事务的思想处理.
强一致性必然导致性能短板, 而弱一致性则有很好的性能但是存在数据安全(灾备数据丢失)/一致性(脏读/脏写等)的问题.
目前 Node.js 业内流行的主要是与 Mongodb 配合, 在数据一致性方面属于短板.
事务并不仅仅是 sql 数据库中的一个功能, 也是分布式系统开发中的一个思想, 事务在分布式的问题中可以称为 "两阶段提交" (以下引用陈皓原文)
第一阶段:
第二阶段:
异常:
redis 与 memcached 的区别?
attr | memcached | redis |
---|---|---|
struct | key/value | key/value + list, set, hash etc. |
backup | × | ✓ |
Persistence | × | ✓ |
transcations | × | ✓ |
consistency | strong (by cas) | weak |
thread | multi | single |
memory | physical | physical & swap |
本文作者:毛超颖
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!