2011-01-27 3 views
23

2011-01-26 21:41:09 +0000과 같은 UTC 시간 문자열은보기 키에 사용되면 올바르게 정렬되지만 시간대 (예 : 2011-01-26 16:41:09 -0500)를 저장하면 문서를 읽기 쉽도록 만들 수 있으므로 좋다고 생각합니다. 날짜를 획기적인 정수로 변환하는 것은 가독성 측면에서는별로 매력적이지 않지만 성능면에서 가장 좋을 수도 있습니다 (또는 차이가 있습니까?). 여기서 권장되는 연습은 무엇입니까?CouchDB에서 datetimes (타임 스탬프)를 저장하는 가장 좋은 방법은 무엇입니까?

답변

27

시간이 한 차원 일이. 시간 소인과 시간대는 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

마지막 에포크부터 밀리 초를 사용하고 싶습니다.

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

내가 (밀리 초) 타임 스탬프가 키 B/C가 어디 뷰를 만들려면 : 당신이 밀리 초에서 새 날짜를 만들 수 있습니다

new Date().valueOf() 

: 당신은 이것을 알아낼 수 정렬은 그렇게 쉬운 방법입니다.

또한 CouchDB 외부의 데이터로 작업 할 때 정수를 사용하는 것이 문자열보다 더 효율적이라고 생각합니다.

6

지도 축소면의지도 측면을 사용하는 경우 이러한 제안은 괜찮을 것입니다. 그러나 결과 (_count, _stats, _sum)를 줄이려면 group_level을 사용할 수 있도록 배열로 날짜를 내보내는 것이 좋습니다.

예를 들어, "2011-02-14"와 같은 날짜 문자열에 (doc.date.split ('-'))를 내면 일, 월, 일에 _count (예 :)를 반환 할 수 있습니다. group_level = 3, 2 및 1을 사용하여 연도를 지정합니다.

키의 시작 부분에 날짜가 아닌 데이터를 추가하여 데이터를 더 필터링 할 수 있습니다. 예를 들어 트위터 이름을 출력하는 경우 키는 [ "bigbluehat", "2011", "02", "14"]와 같을 수 있으며 reduce는 사용자 "bigbluehat"의 모든 트윗의 총 수를 반환 할 수 있습니다. 일별, 월별, 연도별로 해당 사용자의 통계를 제공합니다.

사물의 축소면을 사용하지 않는다면 문자열 기반 키가 좋을 것입니다.

5

내가 사용하는 데이터 저장 장치의 종류와 상관없이 필자는 일반적으로 필드로 유닉스 타임 스탬프를 원합니다. 여기에는 생성 된 날짜에 대해 하나의 필드를 포함시키고 문서를 포함 할 때 변경할 수있는 업데이트 된 필드 변경.

간단히 말하자면 간단히 "신기원으로"밀리 초가 아닌 "정기 신으로부터 초"방식을 선호합니다.

Math.round(new Date().getTime()/1000) 나를위한 트릭입니다.

가독성 측면에서 필자는 쉽게 비교할 수 있도록 정수로 저장하고 프런트 엔드를 사용하여 멋지게 표시하려고합니다.

+1

Unix 타임 스탬프는 어떤 시스템에도 시간을 저장하는 가장 좋은 방법입니다. 나는 타이밍이 중요한 로봇 공학의 배경에서 당신을 말할 수 있습니다. – msysmilu

+2

유닉스 타임 스탬프는 종종 좋은 방법이지만, 그렇지 않은 경우가 많이 있습니다. 예를 들어 32 비트 모기지 계산기에서 유닉스 타임 스탬프를 사용하는 경우 유닉스 타임 스탬프가 만료되는 2038 년 이후 모기지가 지나치게 길어질 수 있습니다. –

관련 문제