Tôi có một ứng dụng gửi dữ liệu dựa trên tương tác của người dùng (không phải đầu vào của người dùng). Dữ liệu được gửi có thể là một giá trị Integer, String, Date hoặc Boolean. Có 140 phím. Chúng tôi có thể nhận được bất cứ nơi nào từ 1 cặp giá trị khóa đến tất cả 140 tại một thời điểm.Tùy chọn thiết kế bảng cho số hàng lớn?
Chúng tôi muốn lưu trữ mọi thứ nhưng sẽ chỉ sử dụng 20 trong số 140 khóa trong ứng dụng. Số còn lại sẽ được sử dụng cho đường mòn kiểm tra sau này - vì vậy chúng tôi vẫn cần lưu trữ chúng.
Dữ liệu này được ứng dụng sử dụng để quyết định nơi người dùng cần truy cập để cần truy cập hồ sơ theo id sinh viên và kéo 20 hoặc hơn tùy chọn trong vòng mili giây. Có thể có hàng tỷ hàng dữ liệu (nó là bản nâng cấp cho một ứng dụng hiện có với hơn 20.000 người dùng) nên hiệu suất là rất quan trọng. Người dùng tạo một hàng mới mỗi khi họ truy cập vào ứng dụng.
VÍ DỤ DỮ LIỆU:
Score:1
ID:3212
IsLast:False
Action:Completed
Tôi có 2 ý tưởng về làm thế nào để làm điều này và tìm kiếm một số giúp đỡ trên đó là tốt nhất hoặc là một lựa chọn thứ ba là một lựa chọn tốt hơn.
OPTION 1:
ý tưởng đầu tiên của tôi là sử dụng một cột cho giá trị như là một chuỗi sau đó có một nhìn lên bảng các loại dữ liệu có thể sử dụng khi giá trị cần được đúc sử dụng.
value | dataType
-----------------------
"1" | int
"Completed" | string
Trong khi dữ liệu được gửi không phải do người dùng tạo, tôi biết có một dấu hiệu xác định ở đâu đó trong phương pháp này. Lý do duy nhất để làm điều này là chúng tôi không biết khóa nào: cặp sẽ được gửi (ngoài ngày và id) và cố gắng tránh nhiều hơn một vài cột.
Câu hỏi SO How to Handle Unknown Data Type in one Table sử dụng ý tưởng tương tự.
OPTION 2:
Các giải pháp khác là phải có 140 cột - một cho mỗi phím. Tuy nhiên, lượng dữ liệu được tạo ra là rất lớn (hàng tỷ hàng) để gọi dữ liệu này sẽ không đủ nhanh - tôi không nghĩ vậy.
Chi tiết kỹ thuật: Điều này đang sử dụng SQL Server 2008 - không phải R2 với DotNet C# và Dịch vụ báo cáo.
Tôi có thiếu thứ gì đó ở đây không - cách tốt nhất để tạo bảng này cho hiệu suất là gì?
Tùy chọn thứ ba: Nhận dữ liệu dưới dạng XML, lưu trữ trong loại dữ liệu NVARCHAR (tối đa). –
Điều này sẽ không làm chậm Dịch vụ Báo cáo khi tạo báo cáo. –
tôi sẽ đặt nó trong một bảng giá trị XML – arnabmitra