sql >> データベース >  >> NoSQL >> MongoDB

mongoで主キー/_idとしてスラッグを使用するとパフォーマンスが低下しますか?

    私の意見では、違います。ほとんどのシナリオでは、パフォーマンスの違いはごくわずかです(ページングを除く )、しかし

    • 代理主キーに関する古い議論が出てきます。 「ナメクジ」はあまり自然な鍵ではありません。はい、それはユニークでなければなりません、しかしあなたがすでに指摘したように、スラッグを変えることは不可能ではないはずです。これだけで私は気になりません...
    • 単調な_idを持っている キーを使用すると、多くの頭痛の種からあなたを救うことができます。最も重要なのは、skipによる高価なページングを回避することです。 およびtake$ltを使用します / $gt _idで 代わりに)。
    • mongodbの最大インデックス長 には制限があります 未満 1024バイト。きれいではありませんが、URLははるかに長い 。誰かがより長いナメクジを入力した場合、それは静かにインデックスから削除されるため、見つかりません。
    • 一貫性のあるインターフェースを使用することをお勧めします。つまり、同じタイプの_idを使用することをお勧めします。 すべて、または少なくともほとんどのオブジェクトで。私のコードでは、値を変更できず、コレクションの書き込み速度が非常に高く、サイズが大きいため、IDとして特別なハッシュを使用しているという1つの例外があります。
    • (公開サイトではなく)管理インターフェイスの記事にリンクしたいとします。どのリンクを使用しますか?通常はIDですが、現在はIDとスラッグは同等です。これで、ユーザーが管理インターフェイスにアクセスできなくなったため、単純なバグ(空のスラッグを許可するなど)を回復するのが困難になります。
    • 文字セットの問題に対処します。記事を検索するためにナメクジを使用することすらしないことをお勧めしますが、ナメクジのハッシュ

    基本的に、最終的には

    のようなスキーマになります。
    { "_id" : ObjectId("a237b45..."), // PK
      "slug" : "mongodb-is-fun", // not indexed
      "hash" : "5af87c62da34" } // indexed, unique
    



    1. PHPを使用したMongoDBアグリゲート-日付ごとにグループ化

    2. RedisクラスターでStackExchange.Redisクライアントを使用する

    3. mongodbをインポートできません

    4. 多くのデータロギング、DB、またはファイルのアーキテクチャ?