了解了现在的大型机,还是感觉我too young too naive
服务器往往要处理大量的数据,我们本地和服务器往往使用socket进行网络通信,socket本质是编程接口(API),对TCP/IP的封装,服务器在这方面的限制往往是网络设备的,而不是服务器设备,比如使用的交换机还有网络运营商给服务器提供的带宽,根据操作系统对于I/O接口的优化,我们甚至可以完全开发更高速的网络产品去提高速度。
我们早期是使用文件进行管理,但是效率太低了,以至于出现了数据库这一专门管理的软件。但是和网络方面的延迟问题比起来,可能受限制更多的是我们的数据库,比如我的mysql是轻量级的数据库,但是我们知道数据库的文件还是存储在磁盘上,访问磁盘要比内存慢得多。而且即使根据操作系统那一套,设置虚拟缓存,但是还是比较慢的。我们同时访问数据库大概极限值在多少呢,有说300有说1000的,其实要进行多方面考虑(包括CPU缓存,内存同步、硬盘读写、以太网延迟等等),数据库可以进行的优化有:
一、SQL查询语句优化
二、主从复制,读写分离,负载均衡
三、数据库分表、分区、分库
查询语句优化是我们常用的方法,通常是使用索引、借助explain(查询优化神器)选择更好的索引和优化查询语句、任何地方都不要使用SELECT * FROM语句、不要在索引列做运算或者使用函数、查询尽可能使用limit来减少返回的行数、使用查询缓存,并将尽量多的内存分配给MYSQL做缓存,我们来看最后一条,因为我们查询了就一定会在缓存里留下,这是计算机进行优化的操作,我们可以将有限的内存释放出来,但是不致于太影响速度。所以这条数据库优化也很常用。
但是如果我们把全部内存分给数据库,我们需要进行高并发的访问,这样我们就可以使用Redis或者memcached,以上权当复习
redis是Nosql数据库,是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库,所以如果多机也是可以的呀。大家可以去给这个Github项目star呀
目前,Vmware(没错,就是那个虚拟机的公司)在资助着redis项目的开发和维护。
Nosql数据库的优势
1)易扩展
2)大数据量提高性能
3)多样灵活的数据模型
BASE:
基本可用(Basically Available)
软状态(Soft state)
最终一致(Eventually consistent)
这篇博文不错