2012-04-02 12 views
2

CouchDBで使用するIDを生成したいとします。私はIDを字句的に昇順にして、別々のタイムスタンプフィールドを維持しないでIDをソートできるようにしたいと思います。私はCouchDBがこのプロパティを持つIDを生成することを知っていますが、データベースをクエリする際のパフォーマンスが低下しないようにするために、サーバー上でアルゴリズムを実行したいと思います。私は結果が字句的に上っていないことを除いてrfc 4112の実装に行きます。字句的に昇順の固有IDの生成

(Date.now()) + 'x' + Math.round(Math.random() *1E18) 

(私はnodejsを使用しています)。非標準のuuidを使用するか、またはjavascriptに組み込まれたランダム関数に頼っている費用はありますか?

答えて

2

それはのUUIDに来るときあなたは、いくつかの選択肢があります。

最初の選択肢は、_idがクライアントサイド(ノード、ブラウザなど)を生成するか、またはソファで作成するかどうかです。あなたはクライアント側であなた自身のUUIDを生成したいと思うように思えます。それは結構です。関数の結果をcouchdbに保存するドキュメントの_idフィールドに貼り付けるだけです。ソファはちょうどそれを使用します。

あなたはidを作成することができます。 Couchdbはあなたが自分で1つを選んでいない場合にのみ_idを生成します。デフォルトでCouchdbは '順次' uuid生成アルゴリズムを使用します。 futonとconfigを使用してアルゴリズムを他のものに変更することができます。 'uuids'というセクションには 'アルゴリズム'のキーがあります。あなたはここにこれらのアルゴリズムのソースを見ることができます:

https://github.com/apache/couchdb/blob/master/src/couchdb/couch_uuids.erl

をここではそれらについての説明を:

http://wiki.apache.org/couchdb/HttpGetUuids?highlight=%28utc%5C_random%29

あなたはutc_random機能はあなたの提案に非常に似ている見ることができるように。しかし、あなたが自分自身を望むなら、あなたはサーバサイドにアルゴリズムを追加し、ソファを再コンパイルすることができます。

質問の2番目の部分は、さまざまなアルゴリズムを選択した場合のパフォーマンスです。私は、ユーザーリストのポストからデイブCottlehuberを引用するつもりです:あなたのドキュメントIDが が継続的に増加しているとき、これはB〜木に書き換えを最小限に抑えるよう

CouchDBのは、最高の挿入時間を持つことになります。この は同じ理由で ビューのビルド時間を助け、無駄なドキュメントスペースを最小化しますが、 でも圧縮中に回復されます。

だから、あなたのアルゴリズムとutc_randomの両方が、文書のIDが絶えず増加しているので、一見有益な一方向の方向に向いています。

0

CouchDBが生成するUUIDを使用することをお勧めしますが、utc_randomを使用するようにサーバーを構成することで、レコードをソートできるタイムスタンプの接頭辞を付けることができます。

http://wiki.apache.org/couchdb/HttpGetUuids

+0

なぜですか?それは本当に私の質問です.CouchDB(または他の実装)は何をしていますか? (私は実際にCouchDBの機能を使用したくないと思うのは、特にブラウザのIDを生成している可能性があるので、余分な往復を意味するからです) – josh

関連する問題