2011-08-17 48 views
15

Chúng tôi đang sử dụng Mnesia làm cơ sở dữ liệu chính cho một hệ thống rất lớn. Mnesia Fragmented Tables đã cư xử rất tốt trong giai đoạn thử nghiệm. Hệ thống có khoảng 15 bảng, mỗi bảng được sao chép trên 2 trang web (nút) và mỗi bảng được phân mảnh rất cao. Trong giai đoạn thử nghiệm, chúng tôi chấp nhận Mnesia với nhiều ưu điểm của cấu trúc phức tạp sẽ làm cho chúng tôi, vì tất cả các ứng dụng của chúng tôi đang chạy trên dịch vụ là các ứng dụng Erlang/OTP. Chúng tôi đang chạy Yaws 1.91 làm Máy chủ Web chính.

Đối với cấu hình một cách hiệu quả Bàn phân mảnh, chúng tôi sử dụng một số tài liệu tham khảo đã sử dụng mnesia trong các hệ thống lớn:
Đó là: Mnesia One Year Later Blog, Part 2 of the Blog, Followed it even here, About Hashing. Các bài đăng trên blog này đã giúp chúng tôi tinh chỉnh ở đây và ở đó để có hiệu suất tốt hơn.Bàn Mnesia rất lớn trong sản xuất

Hiện tại, sự cố. Mnesia có giới hạn kích thước bảng, vâng chúng tôi đồng ý. Tuy nhiên, giới hạn về số lượng các mảnh vỡ chưa được đề cập ở bất kỳ đâu. Vì lý do hiệu suất, và để phục vụ cho dữ liệu lớn, về việc có bao nhiêu mảnh sẽ giữ cho chứng mất trí nhớ "ổn"?

Trong một số bảng của chúng tôi, chúng tôi có 64 đoạn. với n_disc_only_copies được đặt thành số lượng nút trong cụm sao cho mỗi nút có một bản sao trên mỗi đoạn. Điều này đã giúp chúng tôi giải quyết các vấn đề mất trí nhớ khi một nút đã cho nằm ngoài tầm với. Cũng trong blog ở trên, ông đề nghị rằng the number of fragments should be a power of 2, tuyên bố này (ông nói) đã được điều tra từ cách mnesia hiện băm của nó hồ sơ. Tuy nhiên chúng ta cần giải thích thêm về điều này, và sức mạnh của hai người đang được nói đến ở đây: 2,4,16,32,64,128, ...?

Hệ thống được thiết kế để chạy trên HP Proliant G6, chứa bộ vi xử lý Intel (2 bộ xử lý, mỗi lõi 4, tốc độ 2,4 GHz mỗi lõi, kích thước bộ nhớ cache 8 MB), dung lượng RAM 20 GB, dung lượng đĩa 1,5 Terabyte. Bây giờ, 2 trong số những cỗ máy công suất cao này được chúng tôi sử dụng. Cơ sở dữ liệu hệ thống nên được nhân rộng trên cả hai. Mỗi máy chủ chạy Solaris 10, 64 bit.

Số mảnh vỡ nào có thể làm cho hiệu suất của mnesia bắt đầu giảm dần? Liệu có ổn không nếu chúng ta tăng số mảnh từ 64 lên 128 cho một bảng đã cho? làm thế nào về 65536 mảnh (2^16)? Làm thế nào để chúng tôi mở rộng quy mô của chúng tôi để tận dụng không gian Terabyte bằng cách sử dụng phân mảnh?

Vui lòng cung cấp câu trả lời cho các câu hỏi và bạn có thể cung cấp lời khuyên về bất kỳ thông số nào khác có thể nâng cao Hệ thống.

LƯU Ý: Tất cả các bảng chứa hàng triệu bản ghi được tạo ở loại disc_only_copies, do đó không có vấn đề về RAM. RAM sẽ đủ cho một vài bảng RAM mà chúng tôi chạy. Các DBMS khác như MySQL Cluster và CouchDB cũng sẽ chứa dữ liệu và đang sử dụng cùng phần cứng với Mnesia DBMS của chúng tôi. MySQL Cluster được nhân rộng trên hai máy chủ (mỗi máy chủ lưu giữ hai nút NDB, một máy chủ MySQL), nút quản lý nằm trên một HOST khác nhau.

+3

Có thể bạn có thể thử hỏi danh sách gửi thư câu hỏi ngoài trời. Nó có nhiều khẩu súng lớn với nhiều kinh nghiệm và nhiều khả năng bạn sẽ nhận được câu trả lời tốt cho câu hỏi mở kết thúc ở đó. – knutin

+0

cảm ơn @knutin, hãy để tôi thử rằng –

+2

Hey @MuzaayaJoshua, nếu bạn đã đăng lên các câu hỏi sai lệch, bạn có phiền khi chia sẻ liên kết không? – jtmoulia

Trả lời

9

về số lượng câu hỏi phân đoạn: gợi ý có sức mạnh của hai số đoạn đơn giản liên quan đến thực tế mô-đun phân mảnh mặc định (mnesia_frag) sử dụng băm tuyến tính để sử dụng phân đoạn 2^n (nhiều hơn hoặc ít hơn, rõ ràng) giữa các mảnh vỡ.

Về phần cứng lúc xử lý, vấn đề kiểm tra hiệu suất càng cao. Tôi làm điều đó nhiều lần trong công việc về công nghệ khác (không phải trên Mnesia) vì các yếu tố có thể làm giảm hiệu suất là rất nhiều việc cấu hình cơ sở dữ liệu như chứng mất trí chẳng là gì ngoài một trong những vấn đề. Tôi chỉ đơn giản là khuyên bạn làm một bài kiểm tra căng thẳng trên một máy chủ và sau đó kiểm tra các thuật toán trên cả hai máy chủ để hiểu nếu nó quy mô một cách chính xác.

Và đối với mnesia mảnh vỡ số, hãy nhớ rằng có disc_only_copies hầu hết thời gian là chi tiêu trong hai hoạt động:

  • quyết định đoạn có mà kỷ lục

  • lấy các bản ghi từ bảng dets (mnesia backend)

Điều đầu tiên không thực sự phụ thuộc vào số lượng phân đoạn, xem xét theo mặc định, chúng tôi xin lỗi es băm tuyến tính. Điều thứ hai phụ thuộc nhiều hơn vào độ trễ của đĩa cứng so với các yếu tố khác. Vì vậy, một giải pháp tốt sẽ là có nhiều mảnh hơn và ít hồ sơ hơn cho mỗi mảnh, nhưng cố gắng tìm một trạng thái cân bằng để không mất đi những lợi thế của một số chất tăng cường hiệu suất của đĩa cứng như bộ đệm và bộ nhớ cache.