日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 學院 > 編程設計 > 正文

大量小文件的實時同步的解決方案分析

2020-07-14 13:42:49
字體:
來源:轉載
供稿:網友
傳統的文件同步方案有rsync(單向) 和 unison(雙向)等,它們需要掃描所有文件后進行比對,差量傳輸。如果文件數量達到了百萬甚至千萬量級,掃描所有文件將非常耗時。而且正在發生變化的往往是其中很少的一部分,這是非常低效的方式。

之前看了Amazon的Dynamo的設計文檔,它們每個節點的數據是通過Hash Tree來實現同步,既有通過日志來同步的軟實時特點(msyql, bdb等),也可以保證最終數據的一致性(rsync, unison等)。Hash Tree的大體思路是將所有數據存儲成樹狀結構,每個節點的Hash是其所有子節點的Hash的Hash,葉子節點的Hash是其內容的Hash。這樣一旦某個節點發生變化,其Hash的變化會迅速傳播到根節點。需要同步的系統只需要不斷查詢跟節點的hash,一旦有變化,順著樹狀結構就能夠在logN級別的時間找到發生變化的內容,馬上同步。

文件系統天然的是樹狀結構,盡管不是平衡的數。如果文件的修改時間是可靠的,可以表征文件的變化,那就可以用它作為文件的Hash值。另一方面,文件的修改通常是按順序執行的,后修改的文件比早修改的文件具有更大的修改時間,這樣就可以把一個目錄內的最大修改時間作為它的修改時間,以實現Hash Tree。這樣,一旦某個文件被修改,修改時間的信息就會迅速傳播到根目錄。

一般的文件系統都不是這樣做的,目錄的修改時間表示的是目錄結構最后發生變化的時間,不包括子目錄,否則會不堪重負。因為我們需要自己實現這個功能,利用Linux 2.6內核的新特性inotify獲得某個目錄內文件發生變化的信息,并把其修改時間傳播到它的上級目錄(以及再上級目錄)。Python 有 pyinotify,watch.py的代碼如下:

復制代碼
代碼如下:

#!/usr/bin/python
from pyinotify import *
import os, os.path
flags = IN_CLOSE_WRITE|IN_CREATE|IN_Q_OVERFLOW
dirs = {}
base = '/log/lighttpd/cache/images/icon/u241'
base = 'tmp'
class UpdateParentDir(ProcessEvent):
def process_IN_CLOSE_WRITE(self, event):
print 'modify', event.pathname
mtime = os.path.getmtime(event.pathname)
p = event.path
while p.startswith(base):
m = os.path.getmtime(p)
if m < mtime:
print 'update', p
os.utime(p, (mtime,mtime))
elif m > mtime:
mtime = m
p = os.path.dirname(p)
process_IN_MODIFY = process_IN_CLOSE_WRITE
def process_IN_Q_OVERFLOW(self, event):
print 'over flow'
max_queued_events.value *= 2
def process_default(self, event):
pass
wm = WatchManager()
notifier = Notifier(wm, UpdateParentDir())
dirs.update(wm.add_watch(base, flags, rec=True, auto_add=True))
notifier.loop()

在已經有Hash Tree的時候,同步就比較簡單了,不停地獲取根目錄的修改時間并順著目錄結構往下找即可。需要注意的是,在更新完文件后,需要設置修改時間為原文件的修改時間,目錄也是,保證Hash Tree的一致性,否則沒法同步。mirror.py的代碼如下 

復制代碼
代碼如下:

#!/usr/bin/python
import sys,time,re,urllib
import os,os.path
from os.path import exists, isdir, getmtime
src = sys.argv[1]
dst = sys.argv[2]
def local_mirror(src, dst):
if exists(dst) and mtime == getmtime(dst):
return
if not isdir(src):
print 'update:', dst
open(dst,'wb').write(open(src).read())
else:
if not exists(dst):
os.makedirs(dst)
for filename in os.listdir(src):
local_mirror(os.path.join(src,filename), os.path.join(dst,filename))
os.utime(dst, (mtime,mtime))
def get_info(path):
f = urllib.urlopen(path)
mtime = f.headers.get('Last-Modified')
if mtime:
mtime = time.mktime(time.strptime(mtime, '%a, %d %b %Y %H:%M:%S %Z'))
content = f.read()
f.close()
return int(mtime), content
p = re.compile(r'([/d.]+?) +([/w/]+)')
def remote_mirror(src, dst):
mtime, content = get_info(src)
if exists(dst) and mtime == int(getmtime(dst)):
return
print 'update:', dst, src
if not src.endswith('/'):
open(dst,'wb').write(content)
else:
if not exists(dst):
os.makedirs(dst)
for mt,filename in p.findall(content):
mt = int(float(mt))
lpath = dst+filename
if not exists(lpath) or int(getmtime(lpath)) != mt:
remote_mirror(src+filename, lpath)
os.utime(dst, (mtime,mtime))
if src.startswith('http://'):
mirror = remote_mirror
else:
mirror = local_mirror
while True:
mirror(src, dst)
time.sleep(1)
 
如果源文件不在同一臺機器上,可以通過NFS等共享過來。或者可以通過支持列目錄的HTTP服務器來訪問遠程目錄,mirror.py 已經支持這種訪問方式。server.py 是用webpy做的一個簡單的只是列目錄的文件服務器。由于瓶頸在IO上,它的性能不是關鍵。server.py的代碼如下:

復制代碼
代碼如下:

#!/usr/bin/python
import os,os.path
import web
import time
root = 'tmp'
HTTP_HEADER_TIME = '%a, %d %b %Y %H:%M:%S %Z'
class FileServer:
def GET(self, path):
path = root + path
if not os.path.exists(path):
return 404
mtime = time.localtime(os.path.getmtime(path))
web.header('Last-Modified', time.strftime(HTTP_HEADER_TIME, mtime))
if os.path.isdir(path):
for file in os.listdir(path):
if file.startswith('.'): continue
p = os.path.join(path,file)
m = os.path.getmtime(p)
if os.path.isdir(p):
file += '/'
print m, file
else:
print open(path,'rb').read()
urls = (
"(/.*)", "FileServer",
)
if __name__ == '__main__':
web.run(urls, globals())

為了獲得更好性能,以達到更好的實時性,Hash Tree最好是平衡的,比如BTree。如果一個文件發生變化,同步它需要進行的IO操作為N*M,其中N為數的層數,M為每層的文件數目。現在我們N為2,M最大為10000,適當減少它可以獲得更好的性能,比如N為4,M為100。在以后創建目錄結構時,最好能夠考慮這方面的因素。

之前hongqn推薦過一個利用inotify的文件同步方案,同步方式類似于mysql和bdb等,由于過于復雜導致不可靠而沒有采用。上面這個方案只用了一百多行Python代碼就基本解決問題了,是不是很帥?:-)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
中文字幕在线国产| 99国产成 人 综合 亚洲欧美| 91精品久久久久久久久久入口| 久久久水蜜桃| 精品福利在线观看| 午夜私人影院在线观看| 国产欧美日韩精品在线观看| 一区在线视频观看| 亚亚洲欧洲精品| 中文字幕欧美日韩在线不卡| 日本不卡视频一区| 三级网站免费观看| 黄色精品在线观看| 最近中文av字幕在线中文| 中文字幕狠狠干| 91亚洲国产高清| 免费中文字幕日韩欧美| 日韩在线不卡一区| 亚洲成av人片一区二区密柚| 国产激情久久| 欧美日韩中文精品| 欧美日韩精品免费看| 精品人妻一区二区免费视频| 久久香蕉av| 深夜日韩欧美| 极品久久久久久| 日韩高清不卡在线| 91精品在线国产| 中文字幕在线官网| 欧美日韩高清不卡| 粉嫩粉嫩芽的虎白女18在线视频| 国产区日韩欧美| 欧美日韩综合不卡| 香蕉人人精品| 欧美一级搡bbbb搡bbbb| 国产一二三区精品视频| 日韩欧美中文字幕在线观看| 国产一级在线免费观看| 一区二区不卡视频在线观看| 精品亚洲永久免费| 欧美亚洲视频在线看网址| 久久麻豆视频| 欧美日韩精品免费在线观看视频| 最近中文字幕第一页| 国产综合成人久久大片91| 欧美三级日韩三级国产三级| 91精品国产自产观看在线| 日韩精品视频在线观看免费| 日韩专区中文字幕| 精品免费视频| 久久久精品福利| 欧美日韩中文字幕在线视频| 欧美日韩亚洲国产综合| 99亚洲视频| 91精品国产调教在线观看| 99精品视频99| 久久久久久91| 91精品国产综合久久久久久| 高清在线一区| 亚洲福利在线看| 欧美不卡一区二区| 日韩在线播放一区二区| 中文字幕在线观看网址| 国产欧美日韩高清| va中文字幕| 天堂中文在线视频| 中文在线不卡| 日韩精品视频在线观看网址| 中文字幕精品视频| 中文字幕 日韩 欧美| 国产欧亚日韩视频| 欧美日韩性视频一区二区三区| 视频一区视频二区中文| 久久香蕉一区| 国产欧美日韩在线播放| 中文字幕精品在线视频| 中文字幕4区| 中文字幕综合在线| 综合图区亚洲白拍在线| 91精品综合久久久久久| 91欧美日韩在线| www在线视频| 日韩欧美中文字幕在线视频| 亚洲高清不卡一区| 99在线国产| 国产在线第一页| www中文字幕在线观看| 日韩黄色在线播放| 国产99亚洲| 日韩精品视频在线| 九七久久人人| 欧美亚洲国产日韩2020| 成人一区二区不卡免费| 国产在线www| 亚洲开心激情| 国产福利在线导航| 一级免费a一片| 在线一区二区不卡| 欧美三级免费观看| 天天摸日日摸狠狠添| 婷婷精品视频| 日韩精品不卡一区二区| 国产欧美日韩精品高清二区综合区| 精品国产免费视频| 国产婷婷一区二区| 免费精品国产自产拍观看| 日韩欧美一二三| 欧美日韩亚洲国内综合网| 日韩在线视频在线观看| 久久精品日韩无码| 日韩欧美一级精品久久| 婷婷久久综合网| 日韩不卡在线播放| 麻豆一区二区99久久久久| 亚洲一区在线观看免费| 欧美日韩国产一区中文午夜| 国产一级粉嫩xxxx| 国产1卡2卡三卡四卡网站| 在线观看91精品国产入口| 日韩av一区二区在线| 91九色在线看| 日韩中文字幕在线视频观看| 欧美日韩在线视频免费观看| 欧美日韩国产亚洲一区| 国产福利一区二区| www.狠狠干| 亚洲第一中文字幕在线观看| 国产欧美综合视频| 亚洲视频在线观看三级| 日韩欧美国产1| 久久99精品久久久久婷婷| 黄色片免费看| 国产一级免费看| 黄色视屏免费在线观看| 樱花草www在线| a在线观看免费视频| a视频免费在线观看| 69免费视频| 久久久99精品久久| 日韩欧美中文| 一级特黄大欧美久久久| 日韩欧美国产亚洲| 最近高清中文在线字幕在线观看1| 亚洲第一视频| 国产1区在线| 日韩一级网站| 国产亚洲视频中文字幕视频| 91精品免费观看| 日韩在线精品视频| 午夜国产视频| 精品久久人人做人人爽| 国产成人精品三级| 国产一级久久久| 久久99精品久久久久子伦| 福利在线国产| 97久久精品午夜一区二区| 中文字幕精品一区二| 欧美大片在线观看一区| 国产福利不卡| 国产成人精品三级| 亚洲高清视频在线| 欧美日韩亚洲国内综合网| 黄色资源在线观看| 久久精品日韩无码| av免费观看国产| 亚洲综合日韩中文字幕v在线| 欧美中文字幕精品| 视频一区二区精品的福利| 日韩精品在线免费看| 日韩视频一区在线观看| 精品视频www| 欧美中文字幕在线观看视频| 精品国产1区2区3区| 欧美日韩午夜在线视频| 亚洲 欧美 日韩系列| 日韩中文字幕91| 日本亚洲欧美三级| 欧美不卡视频一区| 日韩三级精品电影久久久| 国产永久在线观看| 国产高清在线一区| 久久99久久久久久久噜噜| 国产免费电影网站入口| 精品国产31久久久久久| 国产欧美日韩三级| 99综合精品久久| 欧美一级在线观看| 国产在线观看精品| 一级特黄aaa大片在线观看| 亚洲专区一区| 一区二区高清在线| 欧美日韩国产不卡| 一区二区高清视频| a视频免费在线观看| 日韩在线视频免费观看| 一级日韩一级欧美| 国产成人精品综合网站| 日韩在线精品| 首页国产欧美久久| 99精品一级欧美片免费播放| 精产国产伦理一二三区| 二区视频在线观看| 91精品在线视频观看| 国产资源中文字幕| 日韩精品视频免费看| 欧美二区在线观看| 蜜桃精品视频| 亚洲欧洲在线观看av| 欧美激情一区二区在线| 日本国产在线视频| 亚洲高清在线观看一区| 欧美日韩不卡在线视频| 欧美.日韩.国产.一区.二区| 亚洲羞羞网站| 精品国产综合久久| 91精品国产自产| 日韩 欧美 综合| 美国av一区二区| 中文字幕精品视频在线| 欧美日韩精品免费看| www高清在线视频日韩欧美| 中文字幕欧美人妻精品一区蜜臀| 国产三级精品网站| 精品福利一区二区三区| 亚洲.国产.中文慕字在线| aaa大片在线观看 | 亚洲欧美伊人| 最近中文字幕日韩精品| 日韩欧美中文字幕在线播放| 国产午夜精品视频免费不卡69堂| 又黄又www的网站| 另类专区欧美| 国产欧美日韩精品高清二区综合区| 成人久久久久| 欧美在线观看视频一区| 欧美亚洲另类制服自拍| av中文在线播放| 日韩在线不卡一区| 欧美日韩精品免费| 中文字幕视频一区二区三区久| 天堂在线中文| 欧美日韩亚洲天堂| 国产日韩av一区二区| 91精品国产自产| 亚洲欧洲综合另类| 精品欧美日韩精品| 日韩欧美在线看| 欧美日韩精品国产| 久久久久久自在自线| 最近高清中文在线字幕在线观看1| 亚洲欧美日本国产专区一区| 欧美日韩国产影片| 国产资源在线观看入口av| 一区二区91| 天堂中文在线视频| 欧美日韩国产首页| 中文字幕亚洲第一| 999在线视频| 又黄又www的网站| 日韩欧美在线网站| 日韩.欧美.亚洲| 国产高清在线一区| 在线亚洲免费| 91精品啪在线观看国产60岁 | 亚洲三级中文字幕| 日韩欧美资源站| 精品视频999| 91精品国产综合久久久久 | 日韩在线中文字幕| 欧美 日韩 国产在线| 国产欧美久久久精品影院| 精品调教chinesegay| 国产欧美日韩精品综合| 欧美一卡2卡3卡4卡| 国产欧美日韩在线播放| 91精品国产综合久久福利| 欧美在线视频第一页| 日韩欧美国产高清| 精品视频国产| 中文字幕不卡三区| 午夜一区二区视频| 91精品国产91| 日本中文字幕在线观看| 91亚洲欧美| 精品国内自产拍在线视频| 欧美日韩国产免费观看视频| 欧美三级在线视频| 日韩福利视频导航| 精品一性一色一乱农村| 99日韩精品| 在线视频日韩欧美| 日韩欧美中文在线视频| 精品国产乱码一区二区| 午夜高潮免费视频| 日韩视频在线一区二区| 日韩中文欧美| 国产传媒久久久| 欧美日韩一二三| 中文字幕欧美在线| 亚洲第一视频网站| 久久婷婷国产| 国产区高清在线| 免费看黄资源大全高清| 日韩欧美综合在线| 日韩欧美在线视频| 日韩精品欧美在线| 日韩精品视频免费播放| 欧洲精品在线一区| 日本亚洲欧美| 精品久久久网| 男人的天堂网av| 国产在成人精品线拍偷自揄拍| 久久99精品久久久久久青青日本| 日韩在线观看精品| 黄色国产网站在线观看| 香蕉精品久久| 国产欧美日韩综合精品| 日韩三级一区二区| 精品成人久久久| 欧美日韩精品在线| 欧美中文字幕精品| 日韩欧美综合在线| 精品欧美日韩在线| 蜜桃精品视频| 久久精品日韩欧美| av三级在线播放| 国产一区在线不卡| 欧美日韩精品欧美日韩精品一| 国产香蕉精品视频| 国产福利精品导航| 91精品综合久久久久久 | 在线视频色在线| 日韩中文在线视频| 中文字幕在线国产| 久草中文在线观看| 欧美日韩国产高清一区| 亚洲丝袜一区| 日韩欧美一级在线播放| 中文精品在线观看| 午夜一区二区三区免费| 91精品婷婷国产综合久久| 国产蜜臀在线| 亚洲精品中文字幕乱码三区| 日韩欧美中文在线| 美女免费视频一区| 婷婷中文字幕综合| 中文字幕在线观看国产| 欧美日韩国产一区在线| 欧美午夜精品在线| 99热最新网址| 欧美日韩国产一区在线| 精品日韩一区二区三区免费视频| 欧美日韩色综合| 久久婷婷综合国产| 亚洲a中文字幕| 一区二区高清在线| 国产日韩精品在线| 国产成人精品综合网站| 久久 天天综合| 精品成a人在线观看| 在线黄色国产电影| 搞黄在线观看| 国产九九在线| 精品网站999| 婷婷久久综合网| 国产日韩中文字幕在线| 日本精品国语自产拍在线观看| 日韩在线观看精品| 欧美在线中文字幕| 国产成人精品综合网站| 在线视频观看日韩| 一本一道综合狠狠老| 在线欧美日韩精品| 久久夜色精品国产欧美乱极品| 日韩视频第二页| 日本国产一区| 91久久精品网| 91精品国产综合久久蜜臀| 欧美日韩综合色| 久久精品黄色片| 亚洲一区在线观看网站| 国产激情在线视频| 亚洲综合中文字幕在线| 国产视频97| 欧美久久在线观看| 久久香蕉av| 久久婷婷国产| 91精品国产入口| 精品播放一区二区| 欧美日韩国产一二三| 成人ww免费完整版在线观看| 色欧美日韩亚洲| 亚洲久草视频| 欧美日韩国产大片| 国产一级网站视频在线| 狠狠色噜噜狠狠狠狠97| 国产亚洲欧美色| 中文字幕亚洲一区在线观看| av免费在线网站| 国产不卡的av|