2016-05-30 10 views
0

私たちは、ビデオがmongodbに保存されるシステムを構築しました。ビデオはそれぞれ数百メガバイトのサイズです。このシステムはmongoengineを使ってpython3でビルドされています。 pymongoとbsonのc拡張がインストールされています。パフォーマンス問題Windows上のmongo

mongoengine文書の定義は次のとおりです。Linuxでのビデオの読み込み

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() 

は約3〜4秒かかります。しかし、Windowsで同じコードを実行するには13〜17秒かかります。

この問題の解決方法はありますか?

私は考えていると(無駄に)テスト:

  1. がそう(単一ブロブとしてファイルを保存する
  2. 利回りを使用せずに、単一のブロブなどのビデオを読み込むチャンク
  3. を増やします別々のフレームの格納なし)
+0

これはWindowsサービスとして実行されますか? Windowsサーバーまたはワークステーションでこのコードを実行していますか? NUMAが有効になっていますか? – profesor79

+0

両方のマシンのハードウェアは比較的同じですか? Windows版とディスクフォーマットの種類は? NTFS? – Saleem

+0

私はラップトップ(通常のハードドライブを搭載したWindows 7 Core i7)とSSDを搭載した仮想マシン(バーチャルボックスWindows 10)の両方でこの動作をテストしました。私はNUMAについて知らなかった、私は確かにそれを試してみるだろう。 –

答えて

0

使用Linux、Windowsはほとんどサポートされていません。 「無限」の仮想メモリを使用すると、Windowsのバリアントに問題が発生します。このスレッドでさらに詳しく説明します: Why Mongodb performance better on Linux than on Windows?

+0

残念なことに、ほとんどのユーザーはLinuxマシンではなくWindowsマシンを使用するため、システムはWindowsで実行する必要があります。私が選ぶことができたら、私はLinuxを選択するのが最も確かでしょう。 –

関連する問題