‘壹’ 鏁版嵁搴撴槸浠涔
鏁版嵁搴掳纸DataBase锛娈B锛夋槸鎸夌収鏁版嵁缁撴瀯𨱒ョ粍缁囥佸瓨鍌ㄥ拰绠$悊鏁版嵁镄勪粨搴撱
闅忕潃淇℃伅鎶链鍜屽竞鍦虹殑鍙戝𪾢锛岀壒鍒鏄20涓栫邯90骞翠唬浠ュ悗锛屾暟鎹绠$悊涓嶅啀浠呬粎鏄瀛桦偍鍜岀$悊鏁版嵁锛岃岃浆鍙樻垚鐢ㄦ埛镓闇瑕佺殑钖勭嶆暟鎹绠$悊镄勬柟寮忋傛暟鎹搴撴湁寰埚氱岖被鍨嬶纴浠庢渶绠鍗旷殑瀛桦偍链夊悇绉嶆暟鎹镄勮〃镙煎埌鑳藉熻繘琛屾捣閲忔暟鎹瀛桦偍镄勫ぇ鍨嬫暟鎹搴撶郴缁燂纴鍦ㄥ悇涓鏂归溃閮藉缑鍒颁简骞挎硾镄勫簲鐢ㄣ
鏁版嵁搴撴槸涓涓闀挎湡瀛桦偍鍦ㄨ$畻链哄唴镄勚佹湁缁勭粐镄勚佹湁鍏变韩镄勚佺粺涓绠$悊镄勬暟鎹闆嗗悎銆傚畠鏄涓涓鎸夋暟鎹缁撴瀯𨱒ュ瓨鍌ㄥ拰绠$悊鏁版嵁镄勮$畻链鸿蒋浠剁郴缁熴备篃灏辨槸璇达纴鏁版嵁搴揿寘钖链変袱绉嶅惈涔夛细淇濈℃暟鎹镄勨滀粨搴撯濓纴浠ュ强绠$悊鏁版嵁镄勬柟娉曞拰鎶链銆
涓岖℃槸鍝绉岖被鍨嬬殑鏁版嵁搴掳纴閮藉簲璇ユ湁浠ヤ笅鍏卞悓镄勫睘镐э细閲囩敤鐗瑰畾镄勬暟鎹绫诲瀷锛涘炲姞鏁版嵁鍏变韩銆佸噺灏戞暟鎹鍐椾綑锛涘叿链夎缉楂樼殑鏁版嵁镫绔嬫э绂鍏锋湁缁熶竴镄勬暟鎹鎺у埗锷熻兘銆傚父瑙佺殑鏁版嵁搴撴湁鐢查ㄦ枃鍏鍙哥殑Oracle銆両BM鍏鍙哥殑DB2銆佸井杞鍏鍙哥殑Access涓岙QL Server浠ュ强姝h佽︾粏浠嬬粛镄凪ySQL銆
鏁版嵁搴撶殑缁撴瀯
鏁版嵁搴撶殑缁撴瀯鎸囩殑鏄鏁版嵁鍦ㄦ暟鎹搴扑腑镄勭粍缁囧舰寮忓拰瀛桦偍鏂瑰纺銆傛牴鎹鏁版嵁搴撶粨鏋勭殑涓嶅悓锛屾暟鎹搴揿彲浠ュ垎涓哄眰娆″瀷鏁版嵁搴撱佺绣鐘跺瀷鏁版嵁搴撱佸叧绯诲瀷鏁版嵁搴揿拰闱㈠悜瀵硅薄鏁版嵁搴撶瓑銆
1銆佸眰娆″瀷鏁版嵁搴掳细链镞╃殑鏁版嵁搴撶被鍨嬩箣涓锛屽畠镄勬暟鎹缁撴瀯绫讳技浜庝竴妫垫爲褰㈢粨鏋勶纴鏁版嵁涔嬮棿瀛桦湪涓瀵瑰氱殑灞傛″叧绯汇傛疮涓鑺傜偣鍙浠ュ寘钖澶氢釜瀛愯妭镣癸纴浣嗗彧鑳芥湁涓涓鐖惰妭镣广傚眰娆″瀷鏁版嵁搴揿父鐢ㄤ簬绠$悊澶嶆潅镄勫伐绋嫔拰绉戝︽暟鎹銆
2銆佺绣鐘跺瀷鏁版嵁搴掳细鍦ㄥ眰娆″瀷鏁版嵁搴撶殑锘虹涓婂彂灞曡捣𨱒ョ殑涓绉嶆暟鎹搴撶被鍨嬨傜绣鐘跺瀷鏁版嵁搴撶殑鏁版嵁缁撴瀯绫讳技浜庝竴涓缃戠姸缁撴瀯锛屾暟鎹涔嬮棿瀛桦湪澶氩瑰氱殑鍏崇郴銆傛疮涓璁板綍鍙浠ユ湁澶氢釜鐖惰板綍鍜屽氢釜瀛愯板綍銆傜绣鐘跺瀷鏁版嵁搴揿父鐢ㄤ簬澶勭悊澶嶆潅镄勫叧镵旀暟鎹銆
3銆佸叧绯诲瀷鏁版嵁搴掳细鐩鍓嶅簲鐢ㄦ渶骞挎硾镄勪竴绉嶆暟鎹搴撶被鍨嬶纴瀹幂殑鏁版嵁缁撴瀯鏄鐢卞氢釜琛ㄦ牸缁勬垚锛岃〃镙间箣闂村彲浠ュ缓绔嫔叧绯汇傚叧绯诲瀷鏁版嵁搴揿彲浠ヤ娇鐢⊿QL璇鍙ヨ繘琛屾煡璇銆佹洿鏂般佸垹闄ょ瓑镎崭綔锛屾敮鎸佷簨锷″勭悊鍜岀储寮旷瓑楂樼骇锷熻兘銆
4銆侀溃钖戝硅薄鏁版嵁搴掳细涓绉嶆柊鍨嬬殑鏁版嵁搴撶被鍨嬶纴瀹幂殑鏁版嵁缁撴瀯绫讳技浜庨溃钖戝硅薄绋嫔簭璁捐′腑镄勫硅薄鍜岀被銆傞溃钖戝硅薄鏁版嵁搴揿皢鏁版嵁瀛桦偍鍦ㄥ硅薄涓锛屽硅薄涔嬮棿鍙浠ュ缓绔嫔叧绯诲拰缁ф圹鍏崇郴锛屾敮鎸佸氭佸拰灏佽呯瓑闱㈠悜瀵硅薄镄勭壒镐с傞溃钖戝硅薄鏁版嵁搴揿父鐢ㄤ簬瀛桦偍澶嶆潅镄勫硅薄鏁版嵁鍜屽氩獟浣撴暟鎹銆
浠ヤ笂鍐呭瑰弬钥冿细锏惧害锏剧-鏁版嵁搴
‘贰’ 什么是对象存储
对象存储,也叫做基于对象的存储,是用来描述解决和处理离散单元的方法的通用术语,这些离散单元被称作为对象。
就像文件一样,对象包含数据,但是和文件不同的是,对象在一个层结构中不会再有层级结构。每个对象都在一个被称作存储池的扁平地址空间的同一级别里,一个对象不会属于另一个对象的下一级。
文件和对象都有与它们所包含的数据相关的元数据,但是对象是以扩展元数据为特征的。每个对象都被分配一个唯一的标识符,允许一个服务器或者最终用户来检索对象,而不必知道数据的物理地址。这种方法对于在云计算环境中自动化和简化数据存储有帮助。
对象存储经常被比作在一家高级餐厅代客停车。当一个顾客需要代客停车时,他就把钥匙交给别人,换来一张收据。这个顾客不用知道他的车被停在哪,也不用知道在他用餐时服务员会把他的车移动多少次。在这个比喻中,一个存储对象的唯一标识符就代表顾客的收据。
‘叁’ Linux里面什么是数据持久化
数据持久化顾名思义就是把程序中的数据以某种形式保存到某存贮介质中,以达到持久化的目的。当程序运行时,一些数据是临时保存在内存中,一旦退出系统,这些数据就丢失了。那么,使用某种手段将数据保存在硬盘上或者数据库中,这样即使退出系统后又重新启动系统,那么这些数据仍然可以重新找回来。
例如管理员向一个用户管理系统中添加了一个用户的资料,那么这个系统需要将新添加的资料保存到数据库中,否则系统退出或者电脑重启后该用户资料就会丢失。将数据从内存保存到数据库中,这便是数据的持久化。当然,数据库只是持久化方式中的一种,也可以保存在其他的永久存贮介质中。
图为数据持久化的过程示意图。
持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。
持久化是将程序数据在持久状态和瞬时状态间转换的机制。
DBC就是一种持久化机制。文件IO也是一种持久化机制。
日常持久化的方法
在一定周期内保持不变就是持久化,持久化是针对时间来说的。数据库中的数据就是持久化了的数据,只要你不去删除或修改。比如在浏览器中一次Session会话中Session对象变量也是不变的,是Session容器中持久化。对象持久化的方式有很多种,根据周期不同有,page,Session,Application。对象序列化机制对于需要将对象的状态保存到文件中,而后能够通过读入对象状态来重新构造对象,恢复程序状态. 对象序列化的过程是对象持久化的方法之一,把对象保存到文件中。
简单的理解持久化可以在二个层面:应用层和系统层、
应用层
如果关闭(shutdown)你的应用然后重新启动则先前的数据依然存在。
系统层
如果关闭(shutdown)你的系统(电脑)然后重新启动则先前的数据依然存在。
持久化是一种对象服务实现至少3个接口
,就是把内存中的对象保存到外存中,让以后能够取回。需要实现至少3个接口:
void Save(object o) 把一个对象保存到外存中
Object Load(object oid) 通过对象标识从外存中取回对象
boolExists(object oid) 检查外存中是否存在某个对象.
类似概念序列化
我们先跳开一下,看看另一个类似的有用概念:序列化Serialize也是一种对象服务,就是把内存中的对象序列化成流、或者把流反序列化成对象。需要实现2个接口:
void Serialize(Stream stream,object o) 把对象序列化到流中
object Deserialize(Stream stream) 把流反序列化成对象
序列化和持久化很相似,有些人甚至混为一谈,其实还是有区别的,序列化是为了解决对象的传输问题,传输可以在线程之间、进程之间、内存外存之间、主机之间进行。我之所以在这里提到序列化,是因为我们可以利用序列化来辅助持久化,可以说凡是可以持久化的对象都可以序列化,因为序列化相对容易一些(也不是很容易),所以主流的软件基础设施,比如.net和java,已经把序列化的框架完成了。
持久化方案可以分为关系数据库方案、文件方案、对象数据库方案、xml数据库方案
现今主流的持久化方案是关系数据库方案,
关系数据库方案不仅解决了并发的问题,更重要的是,关系数据库还提供了持久化服务之外的价值:统计分析功能。刚才我说到,凡是可以序列化的对象都可以持久化,极端的说,我们可以只建立一个表Object(OID,Bytes),但基本上没有人这么做,因为一旦这样,我们就失去了关系数据库额外的统计分析功能。关系数据库和面向对象之间有一条鸿沟,因为二者模式不匹配,所以就存在一个OR映射问题。
Redis支持两种数据持久化方式:rdb方式和aof方式。前者会根据配置的规则定时将内存中的数据持久化到硬盘上,后者则是在每次执行写命令之后将命令记录下来。两种持久化方式可以单独使用,但是通常会将两者结合使用。
1、RDB方式
RDB方式的持久化是通过快照的方式完成的。当符合某种规则时,会将内存中的数据全量生成一份副本存储到硬盘上,这个过程称作”快照”,redis默认开启该持久化功能,具体配置如下:
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename mp.rdb
#文件名称
dir ./
#rdb文件存放路径
配置后系统会自动进行快照,save 60 10000表示60秒内有10000次写入,那么就会调用bgsave
除了系统自动进行快照外,我们也可以手动执行SAVE或BGSAVE命令主动进行快照操作:
执行SAVE或BGSAVE命令
执行FLUSHALL命令
2、AOF方式
在使用Redis存储非临时数据时,一般都需要打开AOF持久化来降低进程终止导致的数据丢失,AOF可以将Redis执行的每一条写命令追加到硬盘文件中,这一过程会降低Redis的性能。
默认情况下,Redis没有开启AOF(append only file)持久化功能,可以通过在配置文件中作如下配置启用:
appendonly no #是否开启aof,开启时将no改为yes
appendfilename "appendonly.aof" 持久化文件名称
auto-aof-rewrite-percentage 100
#当前AOF文件大小是上次日志重写得到AOF文件大小的二倍时,自动启动新的日志重写过程。
auto-aof-rewrite-min-size 64mb
#当前AOF文件启动新的日志重写过程的最小值,避免刚刚启动Reids时由于文件尺寸较小导致频繁的重写。
appendfsync :everysec (推荐配置)
#持久化策略
always (同步持久化,每次发生数据变更会被立即记录到磁盘,性能差但数据完整性比较好)
everysec (异步操作,每秒记录,如果一秒钟内宕机,有数据丢失)
no (将缓存回写的策略交给系统,linux 默认是30秒将缓冲区的数据回写硬盘的)
一般来说可以考虑同时使用两种持久化方案.