2010-12-30 25 views
6

Chúng tôi hiện đang lưu trữ câu trả lời cho 52 câu hỏi được xác định trước cho khách hàng của chúng tôi trong trang web mai mối của chúng tôi.Làm thế nào để chia tay một bảng chứa 100 triệu + số hồ sơ?

chúng tôi có hơn 30 triệu người dùng duy nhất tổng hợp cho trường hợp xấu nhất của một hàng 52x30million. Trong số 52 câu hỏi này, 11 câu hỏi bắt buộc và luôn được trả lời.

Giải pháp trước đây của chúng tôi là mở bảng câu trả lời cho mỗi câu hỏi. Giải pháp này phân phối các hàng trả lời của chúng tôi để chèn/xóa/cập nhật nhanh hơn. Nhưng nó cũng gây ra cho chúng tôi một chương trình độc đáo như tự động mở một bảng mỗi khi một câu hỏi được thêm/cập nhật, hoặc loại bỏ một bảng câu trả lời nếu nó bị hủy vĩnh viễn.

Chúng tôi muốn đưa ra giải pháp tốt hơn cho phiên bản thứ ba của chúng tôi nhưng chưa thể đạt được rất xa.

Bất kỳ ý tưởng nào để thực hiện điều này theo bất kỳ cách nào khác, có lẽ là cách thông thường hơn?

Trả lời

0

Tôi không chắc liệu câu hỏi của bạn có dựa trên cửa sổ hoặc Linux hay không.

Tuy nhiên nói, có bạn coi là một cơ sở dữ liệu tài liệu ala nosql cái gì đó như RavenDB cho các cửa sổ, couchDB cho apache hoặc thậm chí MongoDb

Có một số lợi ích của việc sử dụng một giải pháp nosql.

Đọc this hoặc Google vì lợi ích của cơ sở dữ liệu tài liệu nosql.

+0

Xin lỗi, quên đề cập đến điều đó. Chúng tôi đang sử dụng SQL Server 2005. – Chiao

+0

RavenDB là cửa sổ dựa trên. – Rippo

+0

Công ty có quy mô trung bình của chúng tôi được thành lập trong các sản phẩm MS trong hơn 10 năm và không may thay đổi db không phải là một lựa chọn ... – Chiao

0

Tôi cho rằng bạn không thể chuyển DB dễ dàng sang DB XML. Vì vậy, những gì về việc tách các lược đồ thành 3 bảng:

  1. QuestionaireMain = UID | Q1 | ... | Q11: Giữ tất cả các câu hỏi cần
  2. OptionalQuestion = QID | Desc: Xác định những câu hỏi bắt buộc
  3. QuestionaireOptional = UID | QID | ANSWER: câu trả lời cho những câu hỏi Giữ tùy chọn

Martin.

+0

Hiện tại câu trả lời được chia thành 52 bảng. Mỗi bảng câu hỏi bắt buộc trả lời đang nắm giữ ~ 5 triệu bản ghi, trong khi bảng câu hỏi câu hỏi tùy chọn đang nắm giữ ~ 2,5 triệu mỗi. Nếu chúng ta nhóm chúng thành 2 bảng chỉ, sẽ có rất nhiều hàng trong mỗi bảng mà chúng tôi đang cố gắng phân chia theo cách nào đó sau đó đặt từng bảng riêng biệt. – Chiao

1

Tại sao bạn có hiệu suất kém ngay bây giờ? Bạn có biết nếu bạn là IO bị ràng buộc hoặc bị cuộc sống trang ngắn? Trước khi thay đổi thiết kế, công ty của bạn cần xác định lý do tại sao bạn có hoàn hảo xấu.

tôi sẽ đoán phần cứng của bạn là

  • ít hơn 2 buổi biểu diễn của bộ nhớ cho SQL
  • chạy các ứng dụng khác trên máy chủ lưu trữ SQL
  • có một Raid 5 lưu trữ db của bạn
  • có các các tệp nhật ký trên cùng một đĩa với db của bạn
  • có db tạm thời trên cùng một ổ đĩa như db

tôi sẽ đoán bảng SQL của bạn có

  • không có chỉ số hoặc chỉ số trên mỗi cột
  • mỗi cột là kiểu dữ liệu tương tự và chiều dài (varchar (256))
    • cho phép null trong mỗi cột

Thiết kế db tốt nhất là thiết kế satisify quy tắc kinh doanh của bạn. Các quy tắc nghiệp vụ của bạn có định nghĩa một hệ thống báo cáo hay một OLAP không? Bạn có quy tắc kinh doanh xác định SLA cho ứng dụng không?

Lời khuyên của tôi là thuê một công ty có hồ sơ theo dõi đã được chứng minh là xác định hiệu suất SQL kém. Thực hiện ý tưởng của họ trước rồi thiết kế lại để đáp ứng SLA của bạn. 1,5 tỷ hàng cho SQL Server không phải là nhiều trong một bảng nếu người ta biết làm thế nào nó sẽ được sử dụng, OLAP hoặc báo cáo.

tôi thực sự không muốn điều này âm thanh khắc nghiệt nhưng không có một cuộc điều tra của tất cả các khía cạnh hiệu suất của các ứng dụng bất cứ đề nghị sẽ là một sự lãng phí thời gian của bạn.

+0

Đồng ý! Không biết nguyên nhân gốc rễ của vấn đề là gì, thật khó để giải quyết vấn đề đúng đắn! – Pat

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