统并使用了XFS文件系统,逻辑上使用一致性哈希算法将固定总数的partitio
映射到每个StorageNode上,每个data也使用同样的哈希算法映射到partitio
上。存储内容一般放在srv
odesdb1之类的路径下,其目录结构如下所示:accou
ts、asy
c_pe
di
g、co
tai
ers、objects、quara
ti
ed和tmp。其中accou
ts、co
tai
ers、objects分别是账号、容器、对象的存储目录,asy
c_pe
di
g是异步待更新目录,quara
ti
ed是隔离目录,tmp是临时目录。objects:objects目录下存放的是各个partitio
目录,在其中每个partitio
目录是由若干个suffix_path名的目录和一个hashespkl文件组成,
第11页共14页
fOpe
StackSwift学习笔记
suffix_path目录下是由object的hash_path名构成的目录,hash_path在目录下存放了关于object的数据和元数据;object的数据存放在后缀为data的文件中,它的metadata存放在以后缀为meta的文件中,将被删除的Object以一个0字节后缀为ts的文件存放。accou
ts:在accou
ts目录下存放的是各个partitio
,而每个partitio
目录是由若干个suffix_path目录组成,suffix_path目录下是由accou
t的hsh名构成的目录,在hsh目录下存放了关于accou
t的sqlitedb;在accou
t的db文件中,包含了accou
t_stat、co
tai
er、i
comi
g_sy
c、outgoi
g_sy
c4张表;其中,accou
t_stat是记录关于accou
t的信息,表如名称、创建时间、co
tai
er数统计等等;co
tai
er记录关于co
tai
er表的信息;表i
comi
g_sy
c记录到来的同步数据项;表outgoi
g_sy
c表示推送出的同步数据项。co
tai
ers:co
tai
ers目录结构和生成过程与accou
ts类似,co
tai
ers的db中共有5张表,其中i
comi
g_sy
c和outgoi
g_sy
c的schema与accou
ts中的相同。其他3张表分别为co
tai
er_stat、object、sqlite_seque
ce;表co
tai
er_stat与表accou
t_stat相似,其区别是co
tai
er_stat存放的是关于co
tai
er信息。tmp:tmp目录作为accou
tco
tai
erobjectserver向partitio
目录内写入数据前的临时目录。例如,clie
t向server上传某一文件,objectserver调用DiskFile类的mkstemp方法创建在路径为pathdevicetmp的目录。在数据上传完成之后,再调用put方法,将数据移动到相应路径。asy
c_pe
di
g:asy
c_pe
di
g存放未能及时更新而被加入更新队列的数据。本地server在与remoteserver建立HTTP连接或者发送数据时超时导致更新失败时,将把文件放入asy
c_pe
di
g目录。这种情况经常发生在系统故障或者是高负荷的情况下。如果更新失败,本次更新被加入队列,然后由Updater继续处理这些失败的更新工作;accou
t与co
tai
er的db和object两者的pe
di
gr