Review
English Article
SQL vs. NoSQL Databases: What’s the Difference?
In the world of database technology, There are main types of database:SQL(relational databases) and NoSQL(non-relational databases).
Relational databases:
Structured Query Language (SQL), like a phone book, consists of two or more tables with columns and rows, Each row represents an entry, and each column sorts a every specific type of information, like a name, address, and phone number. The relationship between tables and field types is called a schema, the schema must be clearly defined before any information can be added in a relational database.
SQL is a lightweight, declarative language that does a lot of heavy lifting for the relational database.
Popular SQL: MySQL/Oracle/IMB DB2/MariaDB....
NOSQL databases:
Think of non-relational databases more like file folders, assembling related information of all types.If a WordPress blog used a NoSQL database, each file could store data for a blog post: social likes, photos, text, metrics, links and more.
NoSQL databases are document-oriented. non-structured data can be stored in a single document that can be easily found but isn't necessarily categorized into fields like a relational database does. Its more intuitive,but note that storing data in bulk like this requires extra processing effort and more storage than highly organized SQL data.
Popular NoSQL databases: MongoDB/Apache's CouchDB/HBase/Oracle NoSQL/Riak
Reaons to use a SQL database:
- You need to ensure ACID compliancy
- Your data is structured and unchanging.
Reasons to use a NOSQL database:
- storing large volumes of data that often have little to no structure.
- Making the most of cloud computing and storage.
- Rapid development.
Chinese Article
TCP 的那些事儿(上)
这篇文章干货太多,不是一时可以都能看懂,又结合网上的资料看了一下,之前就是了解基本的原理三次握手,四次挥手。并没有仔细研究其内在原理。
TCP包头格式:
- 源端口号
- 目的端口号
- 序号
- 确认序号
- 首部长度+保留位
- 标志位
- 窗口大小,负责拥塞控制,以防止数据阻塞。
- 校验和
- 紧急指针
- 选项
- 数据
标志位
SYN:TCP三次握手中,如果A是发起端,则A就对服务器发一个SYN报文。表示建立连接
ACK:收到数据或请求后发送响应时发送ACK报文
RST:表示连接重置
FIN:TCP四次挥手时,表示关闭连接
PSH:发送端需要发送一段数据,这个数据需要接收端一收到就进行向上交付。而接收端在收到PSH标志位有效的数据时,迅速将数据交付给应用层。所以PSH又叫急迫比特。但是现在已经不需要将数据交付给应用层了,因为这些效果在TCP栈已经可以自行处理这些问题了
URG:紧急指针,意为URG位有效的数据包,是一个紧急需要处理的数据包,需要接收端在接收到之后迅速处理
校验和
目的是为了发现TCP首部和数据在发送端到接收端之间发生的任何改动。如果接收方检测到检验和有差错,则TCP段会被直接丢弃。
紧急指针
要求在接收方在没有处理完数据之前就能够发送一些紧急数据,这就使得发送方将CODE字段的URG置为1 即紧急指针字段有效,这样可以不必考虑你发送的紧急数据在数据流中的位置,也就是相当于优先级最高,紧急指针指出的是紧急数据在报文段中结束的位置。如在某些连接中进行强制中,当你按下CTRL+C时,可能出现的就是这种情况。
三次握手
第一次握手:首先由Client发出请求连接即SYN=1,ACK=0(TCP规定SYN=1时不能携带数据,但要消耗一个序列号),因此声明自己的序号是seq=x;
第二次握手:然后Server一直监听客户端是否发来请求,监听到客户端有请求发送,核对后进行回复确认,即SYN=1,ACK=1,seq=y, ack=x+1;
第三次握手:然后Client再依次进行确认,但不用SYN,这时即为ACK=1,seq=x+1, ack=y+1. 然后就建立连接;
问题:首先,为什么要三次,而不是两次?为了可靠,为什么不是四次?
如果两次,那么B无法确定B的信息A是否能收到,所以如果B先说话,可能后面的A都收不到,会出现问题 。
如果四次,那么就造成了浪费,因为在三次结束之后,就已经可以保证A可以给B发信息,A可以收到B的信息; B可以给A发信息,B可以收到A的信息。
为什么TCP协议终止链接要四次?
1 当主机A确认发送完数据且知道B已经接受完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FIN给主机B。
2 主机B收到A发送的FIN,表示收到了,就会发送ACK回复。
3 但这是B可能还在发送数据,没有想要关闭数据口的意思,所以FIN与ACK不是同时发送的,而是等到B数据发送完了,才会发送FIN给主机A。
4 A收到B发来的FIN,知道B的数据也发送完了,回复ACK, A等待2MSL以后,没有收到B传来的任何消息,知道B已经收到自己的ACK了,A就关闭链接,B也关闭链接了
第二种就是就是文章说的:
因为TCP是全双工的,所以,发送方和接收方都需要Fin和Ack。只不过,有一方是被动的,所以看上去就成了所谓的4次挥手。如果两边同时断连接,那就会就进入到CLOSING状态,然后到达TIME_WAIT状态。
Share
2018工作的最后一天,谈两个话题
抖音“生僻字”的视频大火,原创是个帅气小伙,不过他的视频其实还没那么火,一个语文老师发布的“生僻字”转发量是最高的,因为BGM好听,而且人又好看,可能不少人都以为这首BGM是她原创的,而真正原创的作者是另有其人,是刘至佳唱的一首贼好听的BGM,但是又有谁会关心最好听的刘至佳女生版呢?又有谁会关注原创小伙呢?估计大家最关心的还是语文老师那个视频,因为已经被大众所认可了。
关于即将过去的2018年,想对自己说,你以前的主见都是主观看法,现在失去了主见,将来的学识和经历多了,即将会建立新的主见,请迎接好未来崭新的自己。
今天说两个话题:
第一个是君子性非异也,善假于物也。身边的人,以及环境并不重要,重要的是自己是否在核心网络之中,如果身处外围网络,手里只有这么简陋的工具,就算能看到主流的人在做什么,也插不上手,再聪明也无用武之地,只能追逐第三世界的研究。所以已经想办法让自己进入核心网络之中,写程序也要在核心的产品上。而不是外围。
关于成功之前的三步走战略:
第一步是学习第一条定律,不敢犯错才是最大的错误,不怕犯错,勇往直前。
第二步是积累,新人水平再高,你让他直接当市长也不能服众,也指挥不动,如果一个人已经树大根深,你不用他也不行,水平只是积累的前提条件。
第三部是推广,过了学习阶段,你就配得上作为天下英雄的税收,积累,则是你淘汰天下英雄的终极手段。通过博客Github,以及国外论坛帮助他人解决问题,发布开源的控件以及项目让大家所使用,解决他们的问题,就是推广自己绝佳的方式。