0

ミリ秒レベルのタイムスタンプを持つドキュメントを作成する最も効率的な方法を見つけようとしています。私の現在のアプローチをいじった後、次のようになります。

私のタイムスタンプはもともと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);

ここで、convert は次のように定義されます。

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);

これで最も効率的なアプローチは?ミリ秒レベルでデータベースを検索できる必要があります。また、日付と時刻を個別に照会できる必要もあります。日時、日付、時刻の 3 つの時間関連フィールドが存在するように、さらに 2 つのフィールドを追加する必要がありますか? ....そして、これらのフィールドごとにインデックスを作成する必要がありますか? より良いアプローチはありますか?

ありがとう、

ロブ。

4

1 に答える 1

1

MongoDB Date タイプを使用する必要があります。これにより、文字列よりも効率的な形式で日付が保存され、ミリ秒の精度が含まれます。その後、任意の日付/時刻を使用してクエリできるフィールドに単一のインデックスを作成できます。

また、MongoDB に時系列データを格納するための推奨事項が記載されているhttp://blog.pythonisito.com/2012/09/mongodb-schema-design-at-scale.htmlを読むことをお勧めします。多くの更新。

于 2013-07-29T10:59:59.140 に答える