-1

これがシナリオです。エントリを MongoDB に保存し、取得して表示するときに各エントリの公開識別子として _id を使用しています。_id はかなり推測しにくいため、URL の _id に基づいて 1 つのエントリにアクセスできるユーザーは、その情報に基づいて次または前のエントリを推測することはできません (以下の例を除く)。たとえば、md5 ハッシュや uniqid を含む別のフィールドに追加のインデックスを作成する必要もありません。

問題:インポート ジョブの一部として複数のエントリを作成すると、タイムスタンプに部分的に基づいているため、エントリは非常に類似した _id を取得します。インポート中に作成された 3 つのエントリは、例として次のようになります。52014b1a3c9fb7733d000000 52014b1a3c9fb7733d000001 52014b1a3c9fb7733d000002

このシナリオでは、ユーザーはパターンを見て、各識別子の最後の部分を編集しようとし、この場合、別のエントリを表示することに成功する可能性があります。

私の質問: ドキュメントの作成時に MongoId の生成を制御して、たとえば大量の if エントリをインポートとして作成するときに、最後にインクリメント関数のみを使用しないようにすることはできますか? IDのデバイス部分を変更しますか? それはできますか?

私の最後の手段は、_id をエントリのパブリック識別子として使用するのをやめることです。これにより、非常に大きなコレクションに追加のインデックスを設定する必要が生じます。私はそこに行く必要がないことを願っています。

PHP ベースのアプリケーションで MongoDb を使用しています。

4

1 に答える 1

1

自動 ID 生成は、すべてのドライバーが使用する必要がある設定アルゴリズムであるため、変更できません。ただし、独自のアイデアを自分で作成することもできますが、ドキュメントごとに作成する必要があります。

<?php
$document = array(
    "_id" => new MongoID("ffb234234....");
);

MongoIDそのフォーマットが設定されているように、24個の16進文字をコンストラクターに渡すことを確認する必要があります。ただし、これを行う場合は、必ず PID とハッシュ (ホスト名) を含めて、複数のマシンとプロセス間での一意性を保証できるようにしてください。

于 2013-08-08T10:02:11.817 に答える