2011-01-27 13 views
23

2011-01-26 21:41:09 +0000のようなUTC時刻文字列は、ビューキーで使用されると正しくソートされるので大丈夫かもしれませんが、タイムゾーン(例:2011-01-26 16:41:09 -0500)を保存するとドキュメントが読みやすくなります。日付をエポック整数に変換することは、可読性の観点からは魅力的ではないようですが、パフォーマンスには最適かもしれません(あるいはそれは違いがありますか?)。ここで推奨されるプラクティスは何ですか?CouchDBに日付時刻(タイムスタンプ)を保存する最も良い方法は何ですか?

答えて

27

時間は、1次元のものです。タイムスタンプ+タイムゾーンは2次元で、ある時点と場所を表します。ソファのビューは1次元ですが(GeoCouchプラグインではありません)、共通ゾーン(UTC)に保存するのが賢明です。

おそらく最も将来性のあるフォーマットは、おそらく時間順に自然に並べ替える文字列です。おそらく最も便利なフォーマットは何JSON2出力です:

> a = new Date(); 
Thu Jan 27 2011 18:40:52 GMT+0700 (ICT) 
> JSON.stringify(a) 
"2011-01-27T11:40:52.280Z" 
4

いつでもあなたの日付を保存することができます*あなたの意見を重要なものに出力する方法です。

* Date.parse()がそれを読むことができる限り。

良い解決策はここにあります:Sorting Dates in CouchDB Views

+0

+1しかし、タイムスタンプは文書IDに出力される可能性があるため、私は答えをJSON2形式にすることをお勧めします。 (ログを保存するのは、 '_id'の中にタイムスタンプがたくさんある状況です。) – JasonSmith

3

私は、最後のエポックからのミリ秒を使用したいです。私は(ミリ秒)のタイムスタンプは、キーB/Cでビューを作成したいと

var milliseconds = new Date().valueOf(); 
var date = new Date(milliseconds); 

:あなたがしてミリ秒から新しい日付を作成することができます

new Date().valueOf() 

:あなたがこれを理解することができます並べ替えはとても簡単です。

また、少なくともCouchDB以外のデータを扱う場合は、整数を使用する方が文字列より効率的だと思います。

6

Map reduceのMap側を使用している場合は、これらの提案はおそらく問題ありません。しかし、結果(_count、_stats、_sum)を減らしたい場合、group_levelを使用できるように日付を配列として出力することをおすすめします。

たとえば、「2011-02-14」のように書式設定された日付文字列で(doc.date.split( ' - '))を発行すると、1日、 group_level = 3、2、および1をそれぞれ使用して年を設定します。

キーの先頭に日付以外のデータを追加することで、データをさらにフィルタリングできます。たとえば、Twitterの名前を出力していた場合、あなたのキーは["bigbluehat"、 "2011"、 "02"、 "14"]のようになり、あなたのreduceは "bigbluehat"というユーザーのすべてのツイートの合計数を返します日、月、および年の間にそのユーザーの統計情報を取得できます。

物事の削減面を使用していない場合は、文字列ベースのキーは問題ありません。

5

私が使用しているデータストレージの種類にかかわらず、通常、そこにはフィールドとしてUnixタイムスタンプが必要です。そこには、作成日のものと、ドキュメント変更。

私は、単純に簡潔にするために、「エポックからのミリ秒」ではなく、「エポックからの秒」アプローチを好んでいます。

Math.round(new Date().getTime()/1000)私のためのトリックです。

読みやすさの観点から、私は簡単な比較のために整数として保存し、フロントエンドを使ってうまく表示したいと考えています。

+1

Unixのタイムスタンプは、どんなシステムにも時間を保存する最良の方法です。私はタイミングが重要なロボット工学のバックグラウンドからお分かりになります。 – msysmilu

+2

UNIXのタイムスタンプはしばしば良い方法ですが、そうでないケースが多いです。たとえば、32ビットの住宅ローン計算機でUnixのタイムスタンプを使用すると、2038年に住宅ローンが稼働して、Unixのタイムスタンプがなくなると、悪い時間を過ごすことになります。 –

関連する問題