2010-08-06 19 views
7

Chúng tôi hiện đang sử dụng bảng tóm tắt tổng hợp thông tin cho người dùng của chúng tôi theo giờ theo giờ UTC. Vấn đề chúng tôi đang gặp phải là bảng này đang trở nên quá lớn và làm chậm hệ thống của chúng tôi xuống vô cùng. Chúng tôi đã thực hiện tất cả các kỹ thuật điều chỉnh được khuyến nghị cho PostgreSQL và chúng tôi vẫn gặp phải sự chậm chạp.Tôi làm cách nào để tổng hợp dữ liệu theo ngày và múi giờ vẫn tuân theo?

Ý tưởng của chúng tôi là bắt đầu tổng hợp theo ngày thay vì theo giờ, nhưng vấn đề là chúng tôi cho phép khách hàng thay đổi múi giờ, tính toán lại dữ liệu cho ngày đó.

Có ai biết cách lưu trữ bản tóm tắt hàng ngày nhưng vẫn tôn trọng số và tổng số khi họ chuyển múi giờ?

+3

Có phải chúng ta đang nói đến tất cả các múi giờ trên Trái đất? – MPelletier

+1

Nói đúng cách để lập mô hình dữ liệu, bạn sẽ mất chi tiết múi giờ khi bạn đi đến mức chi tiết ban ngày. Tuy nhiên, bạn có thể tổng hợp theo múi giờ, đặc biệt nếu câu trả lời cho câu hỏi của @ MPelletier là "Không". – bobs

+0

@MPelletier chúng tôi tổng hợp theo giờ ngay bây giờ, vì vậy chúng tôi chỉ hỗ trợ múi giờ "trên giờ" –

Trả lời

4

Tóm tắt dữ liệu trong các bảng có cột thời gian chờ và trường "ngày" (ngày) là ngày cho dòng tóm tắt cụ thể đó. Chỉ mục trên (timeoffset, ngày, các lĩnh vực có liên quan khác), clustered nếu có thể (có lẽ PostgresSQL đã clustered chỉ mục?) Và tất cả nên được tốt.

+1

Vì vậy, thay vì 24 dòng mỗi ngày, một ngày sẽ tạo một dòng ... gấp 24 múi giờ. Tôi không thể thấy được sự gia tăng đáng kể ở đây. – MPelletier

+0

tôi nghĩ về điều này, nhưng sau đó tôi phải duy trì 24 bảng tóm tắt cũng sẽ làm tăng khả năng của một sự khác biệt trong báo cáo giữa các múi giờ. –

+2

@MPelletier - sự khác biệt là bạn không cần phải tổng hợp 24 dòng trong một ngày để tạo ra con số hàng ngày - bạn kéo ra một dòng tóm tắt cho khoảng thời gian cụ thể/ngày đó - vì vậy bạn đang làm 1/24 công việc - với việc lập chỉ mục thích hợp tất nhiên. –

0

Tôi giả sử bạn đã trải qua tất cả các cân nhắc phân vùng, chẳng hạn như phân vùng theo người dùng.

Tôi có thể thấy một số giải pháp cho vấn đề của bạn, tùy thuộc vào mẫu sử dụng.

  1. Tổng hợp dữ liệu mỗi ngày, mỗi người dùng lựa chọn. Trong trường hợp thay đổi múi giờ, lập trình tính toán lại tổng hợp cho đối tác này. Điều này là hợp lý nếu thay đổi múi giờ là không thường xuyên và nếu một sự chậm trễ nhất định trong dữ liệu có thể được giới thiệu khi người dùng thay đổi múi giờ.

  2. Nếu bạn có các biện pháp tương đối ít, bạn có thể duy trì 24 cột cho mỗi phép đo - mỗi cột mô tả tổng hợp hàng ngày cho phép đo theo múi giờ khác.

  3. Nếu thay đổi múi giờ thường xuyên và có nhiều biện pháp, có vẻ như 24 bảng tổng hợp khác nhau sẽ là cách để đi.

+0

thay đổi múi giờ, trên thực tế, tương đối ít. tôi có thể tính toán lại các biện pháp dựa trên sự thay đổi theo chương trình nhưng thay đổi đầu tiên sẽ có sự chậm trễ đáng kể. chúng tôi có khoảng 8 biện pháp, 24 cột cho mỗi biện pháp sẽ không phải là một ý tưởng tốt. im bắt đầu nghĩ rằng 24 bảng là con đường để đi. tôi nhìn vào giải pháp của @Will A và nó có thể tồn tại với một db cột. nhưng không phải với một db phân hủy với số hàng. –

+0

192 cột số nguyên không quá tệ. Và nếu bạn đang sử dụng DB cột, tôi không nghĩ bạn sẽ cần bất kỳ thay đổi lược đồ nào - ít nhất là không có vấn đề nêu trên. – shmichael

0

Tôi cũng gặp sự cố này. Tôi lấy giải pháp này: dữ liệu với loại ngày sử dụng múi giờ địa phương, dữ liệu khác với loại ngày giờ sử dụng múi giờ UTC, vì chỉ mục thống kê là cục bộ. Một lý do khác là bây giờ chúng tôi chỉ có dữ liệu cục bộ.

Các vấn đề liên quan