2013-05-08 72 views
2

我想使用MongoDB的存儲時間序列數據,並認爲這將讓事情變得更合理,以保持代表日期時間一個唯一索引字段。所以,問題是,我真的能與我自己的時間戳更換自動_id創造,會有什麼缺點?使用時間戳作爲mongodb _id?

+0

你的時間序列頻率是多少? – shx2 2013-05-08 19:27:05

+0

〜100毫秒 – xcorat 2013-05-08 19:32:15

回答

2

我真的可以用自己的時間戳替換自動創建的_id嗎?

是的,你可以。

會有什麼缺點嗎?

之一是,你必須爲它工作,而內置的_id是,很好,內置的。 另外一個是,你要負責確保您的_id確實是獨一無二的。根據您的數據頻率和您使用的時間戳種類,這可能很簡單,也可能不很簡單。

我不是說這不是一個好主意。優點很明顯,但是,有缺點。

+0

kool,是否有無論如何我可以讓mongo拒絕任何沒有_id字段的插入(或者沒有有效的時間戳,不管那可能?) – xcorat 2013-05-08 19:43:04

+0

不是我知道的 – shx2 2013-05-08 19:47:47

+2

@xcorat - 很多MongoDB驅動程序自動填充該字段,如果它是空的。某些驅動程序,如C#驅動器,具有在一個發生器或檢驗器插入對[示例]的方法(http://docs.mongodb.org/ecosystem/tutorial/serialize-documents-with-the-csharp-driver/#選擇-AN-idgenerator使用的換一個-ID-場或屬性) – WiredPrairie 2013-05-08 20:14:32

2

您絕對可以使用自己的時間戳填充_id字段。事情看出來的是:

  1. _id是唯一索引,那麼你就必須確保沒有2個文件共享的時間戳。如果你不能保證這一點,那麼它將無法工作。
  2. 如果您要分割此集合,則可能需要避免將時間戳用作分片鍵。如果你總是與當前時間戳寫入數據點,那麼你會發現所有的寫操作會去一個單一的碎片,而不是在碎片分佈均勻。
+0

thx。唯一ID不是問題,我可以使用upsert插入更多字段。對於分片,不會自動生成_id有相同的問題呢?它使用的時間戳太對了? – xcorat 2013-05-08 21:48:47

+0

是的,autogenerated _id會有同樣的問題。在2.4中,您可以使用_id上的散列索引作爲分片鍵來避免分配不均的問題。 – 2013-05-08 22:06:36