用C++驱动程序向MongoDB添加毫秒时间戳的最有效方法
Most Efficient Way to Add Millisecond Timestamps to MongoDB with C++ Driver
我正在努力找出创建具有毫秒级时间戳的文档的最有效方法。经过一番周旋,我目前的做法如下:
我的时间戳最初是boost::posix_time::ptime格式。我可以使用boost::posix_time::time_from_string函数:从毫秒级的时间戳字符串创建一个ptime对象
std::string ts("2012-01-20 15:47:59.223");
ptime pt (time_from_string(ts));
然后我可以将ptime对象转换为mongo:DateT对象:
mongo::Date_t dt = convert(pt);
其中转换定义为:
mongo::Date_t convert(const boost::posix_time::ptime& pt)
{
boost::posix_time::ptime epoch(boost::gregorian::date(1970,boost::date_time::Jan,1));
boost::posix_time::time_duration d = pt - epoch;
return mongo::Date_t(d.total_milliseconds());
}
然后,我将Date_t对象附加到mongo::BSONObjBuilder:的一个实例中
mongo::BSONObjBuilder builder;
builder.genOID();
builder.appendDate ("datetime", dt );
最后,创建一个BSONObj并插入到数据库中。
BSONObj doc = builder.obj();
mongo.insert(collection, doc);
这是最有效的方法吗?我需要能够在毫秒级别上搜索数据库。我还需要能够分别查询日期和时间。我是否需要添加两个额外的字段,以便有三个与时间相关的字段:日期时间、日期和时间?。。。。。。。。。然后为每个字段创建索引?有更好的方法吗?
谢谢,
罗伯。
您应该使用MongoDB Date类型。这以比字符串更有效的格式存储日期,并包括毫秒精度。然后,您可以在字段上有一个单独的索引,可以使用任何日期/时间进行查询。
我还建议你阅读http://blog.pythonisito.com/2012/09/mongodb-schema-design-at-scale.html它为在MongoDB中存储时间序列数据提供了一些建议,尤其是在您进行大量更新的情况下。
相关文章:
- C++:floor unix时间戳到UTC月份
- 如何在c++中录制具有精确帧时间戳的视频
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- Google protobuf 时间戳未声明标识符,在 Windows 上具有C++
- 在多个时间戳处执行函数
- 以天C++为单位的两个时间戳之间的差异
- 获取 QInputEvent 在 Qt 4.8 中被放入 QEventLoop 队列时的时间戳
- 在 C++ 中为文件名添加时间戳
- 如何从远程 SFTP 服务器获取 HH-MM-SS 时间戳格式的文件列表
- 如何将消息时间戳写入日志文件?
- 将时间戳打印到流的最简单方法
- 读取悖论时间戳字段
- C++程序中多个位置的时间 (0) 时间戳
- 在 c++ 中获取 X 毫秒前的时间戳
- 将 unix 时间戳转换为人类可读的日期
- Microsoft NTLM (v2) 中的时间戳使用
- C++中上周一的时间戳
- C++-需要读取存储在文件(.txt)中的时间戳并正确检索
- 使用 C++将时间戳转换为格式化的日期时间
- 用C++驱动程序向MongoDB添加毫秒时间戳的最有效方法