我們構建了一個系統,其中視頻存儲在mongodb中。這些視頻每個都有幾百兆字節大小。該系統使用mongoengine在python3中構建。 pymongo和bson的c擴展已安裝。Windows上的性能問題mongo
的mongoengine文件的定義是:
class VideoStore(Document, GeneralMixin):
video = EmbeddedDocumentListField(SingleFrame)
mutdat = DateTimeField()
_collection = 'VideoStore'
def gen_video(self):
for one_frame in self.video:
yield self._get_single_frame(one_frame)
def _get_single_frame(self, one_frame):
if one_frame.frame.tell() != 0:
one_frame.frame.seek(0)
return pickle.loads(one_frame.frame.read())
class SingleFrame(EmbeddedDocument):
frame = FileField()
閱讀在Linux中的視頻大約需要3到4秒。但是,在Windows中運行相同的代碼需要13到17秒。
有沒有人有任何有關這個問題和任何解決方案的經驗?
我已經想到和測試(沒有用):
- 增加CHUNKSIZE
- 讀取視頻作爲單個斑點,而不使用收率
- 文件存儲爲單個斑點(所以不存儲單獨的幀)
這是作爲Windows服務運行?你是否在Windows服務器或工作站上運行此代碼?是否啓用NUMA? – profesor79
兩臺機器上的硬件是否比較相同? Windows版本和磁盤格式類型? NTFS? – Saleem
我已經在筆記本電腦(具有普通硬盤的Windows 7 Core i7)和具有SSD的虛擬機(virtualbox Windows 10)上測試過這種行爲。我不知道NUMA,我一定會試一試。 –