2016-07-13 13 views
1

には、私は、1のMoの何百もの文書が含まれている袋のデータベースを持っている〜100ミズーリ州これは、Androidコルドバアプリだと私は使用しています:PouchDb SQLiteのと、メモリ不足エラークエリ

  • PouchDb 5.4.5
  • コルドバ - プラグインのsqlite-2 1.0.4

各文書は、このようなものです:

{ 
    data: '...', // Very long string of 1 Mo 
    filename: 'myFile', // Name of a file 
    index: 34 // An integer 
} 

私は」 data重いプロパティを検索せずに、このdbに対してクエリを実行して、ファイル名とインデックスで索引付けされたすべてのドキュメントをリストしたいとします。

だから私はこのような眺めでした:

var designDoc = { 
    _id: '_design/getByFilenameAndIndex', 
    views: {} 
}; 

mapFunction = function(doc){ 
    emit(doc.filename + '/' + doc.index); 
} 

designDoc.views['getByFilenameAndIndex'] = { map: mapFunction.toString() }; 

myDb.put(designDoc); 

をしかし、私は私のデシベルを照会しようとすると、次のように:

error

myDb.query('getByFilenameAndIndex', {include_docs: false}).then(function(docsByFilenameAndIndex){ 
    console.log(docsByFilenameAndIndex); 
}); 

私は次のエラーを取得します

なぜこのエラーが発生していますか?私はまだ私のデバイス(Android 6)で利用できるRAMの900 Moを持っています。私はドキュメントを含めていません。私のdbが20 Mo未満の場合、正常に動作します。

SQLiteプラグインを使用する前に、40Moのdbで正常に動作していましたが、50Mo以上のデータベースが必要なため、SQLiteプラグインを使用しないと作業できません。

編集:私はこれを実行しようとしましたし、私もエラーが出ます:myDb.allDocs({include_docs: false});

+0

ガイダンスを提供しています:http://stackoverflow.com/questions/32244851/androidjava-lang-outofmemoryerror-failed-to-allocate-a-23970828-byte-allocatio –

答えて

1

代わりに、直接あなたの文書に大きなバイナリ文字列を挿入する、あなたはattachmentsを使用する必要があります。これにより、添付ファイルに触れない操作(クエリ、allDocs()など)を実行すると、PouchDBは添付ファイルをメモリに読み込まないようにします。これはあなたのメモリ不足の問題を修正する必要があります。

+0

添付ファイルで修正済みです。ありがとうございます。 – sylvain1264