2016-05-30 75 views
0

我們構建了一個系統,其中視頻存儲在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秒。

有沒有人有任何有關這個問題和任何解決方案的經驗?

我已經想到和測試(沒有用):

  1. 增加CHUNKSIZE
  2. 讀取視頻作爲單個斑點,而不使用收率
  3. 文件存儲爲單個斑點(所以不存儲單獨的幀)
+0

這是作爲Windows服務運行?你是否在Windows服務器或工作站上運行此代碼?是否啓用NUMA? – profesor79

+0

兩臺機器上的硬件是否比較相同? Windows版本和磁盤格式類型? NTFS? – Saleem

+0

我已經在筆記本電腦(具有普通硬盤的Windows 7 Core i7)和具有SSD的虛擬機(virtualbox Windows 10)上測試過這種行爲。我不知道NUMA,我一定會試一試。 –

回答

0

使用Linux,Windows得不到支持。使用「無限」虛擬內存等其他因素會導致Windows變體出現問題。此線程進一步闡述: Why Mongodb performance better on Linux than on Windows?

+0

不幸的是,系統需要在Windows上運行,因爲大多數用戶將擁有Windows機器而不是Linux系統。如果我可以選擇,我肯定會選擇Linux。 –