JAva mongodb問題セットの使用

1944 ワード

1.jsとjava言語の違い:
質問:
mongoはjsエンジンであるため、現在のアプリケーションの多くはjava開発を採用しているが、jsは強い言語タイプではないため、書き込まれたjsonに数字が含まれている場合に問題が発生する.
jsは数字がnumberタイプであると考えられ、言い換えればjsのnumberタイプに対応する強いタイプの言語のfloatは、1つのデータを書き込むとjavaで整形に変換すると失敗する.
解決:
jsを使用してmongodbを更新することは禁止されています.saは使用時にクエリーのみを許可し、変更と追加は許可されていません.
2.クエリーmongodbレプリケーションセットに読み取り圧力が分散されていません:
質問:
mongodb replicate setsアーキテクチャは、認証を設定し、slaveOk()をオンにします.すべての読み取りは対応するsecondaryに割り当てられていません.
解決:
mongodbは実行時に設定したslaveOk()が自由なので、後退後に再設定しなければなりません.
したがってjavaコードでは、ライブラリから読むかどうかを明確に説明する必要があります.コードは次のとおりです.
mongo.setReadPreference(ReadPreference.SECONDARY);
  
db.setReadPreference(ReadPreference.SECONDARY);
      ,      

3.maxBsonObjectSize
アプリケーション開発では、ドキュメント(document)のサイズが異なる場合が多いが、mongodbサーバ側ではドキュメントサイズが設定されており、以前のバージョンでは4 M、後に16 Mに設定されている.
一方、ドライバのデフォルトは4 Mで、サーバからデータを取得すると、サーバ側のデータが採用されます.
JAvaドライバによる最大bsonデータコードの取得は以下の通りです.
int fetchMaxBsonObjectSize() {
        if (_masterPortPool == null)
            return 0;
        DBPort port = _masterPortPool.get();
        try {
            CommandResult res = port.runCommand(_mongo.getDB("admin"), new BasicDBObject("isMaster", 1));
            // max size was added in 1.8
            if (res.containsField("maxBsonObjectSize")) {
                _maxBsonObjectSize.set(((Integer) res.get("maxBsonObjectSize")).intValue());
            } else {
                _maxBsonObjectSize.set(Bytes.MAX_OBJECT_SIZE);
            }
        } catch (Exception e) {
            _logger.log(Level.WARNING, "Exception determining maxBSONObjectSize ", e);
        } finally {
            port.getPool().done(port);
        }

        return _maxBsonObjectSize.get();
    }

取得したmaxBsonObjectSizeのデータは,サーバ側のこのデータを修正すればよい.
具体的な設定は次のとおりです.
------
author: madding.lip
date: 2012.02.09