2013-05-08 66 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