2010-07-22 32 views
5

Tôi đang viết một điều kiểu cơ sở dữ liệu trong C (nghĩa là nó sẽ lưu trữ và hoạt động trên khoảng 500.000 bản ghi). Tôi sẽ được chạy nó trong một môi trường hạn chế bộ nhớ (VPS) vì vậy tôi không muốn sử dụng bộ nhớ để bóng. Tôi sẽ không xử lý một lượng lớn dữ liệu - có lẽ lên tới 200MB, nhưng tôi muốn bộ nhớ còn lại trong khu vực 30MB (kéo những con số này ra khỏi không khí).Tôi có nên quản lý các trang hoặc chỉ dựa vào bộ nhớ ảo không?

Bản năng của tôi là xử lý trang của riêng tôi (cơ sở dữ liệu thực hiện điều này), nhưng tôi đã nhận được lời khuyên rằng tôi chỉ nên phân bổ tất cả và cho phép hệ điều hành thực hiện phân trang VM cho tôi. Các con số của tôi sẽ không bao giờ tăng lên trên bậc độ lớn này. Lựa chọn nào tốt nhất trong trường hợp này?

Giả sử lựa chọn thứ hai, tại thời điểm nào nó sẽ hợp lý để chương trình thực hiện phân trang riêng? Rõ ràng RDBMsses có thể xử lý gigabyte phải làm điều này, nhưng phải có một điểm dọc theo quy mô mà tại đó các câu hỏi là giá trị yêu cầu.

Cảm ơn!

Trả lời

9

Sử dụng malloc cho đến khi thiết bị đang chạy. Sau đó, chỉ sau đó, bắt đầu lập hồ sơ. Nếu bạn gặp phải các vấn đề về hiệu năng giống như "cơ sở dữ liệu thực" độc quyền và chủ đạo, bạn sẽ bắt đầu thực hiện tối ưu hóa cache/page/alignment. Những thứ này có thể dễ dàng được đánh dấu sau khi bạn có một cơ sở dữ liệu làm việc, và trực giao để có một cơ sở dữ liệu làm việc.

+1

chỉ có câu trả lời hợp lý. "Tối ưu hóa sớm là gốc rễ của tất cả các điều ác". –

+0

Mọi người đều thích dòng đó. Ở đây tôi có xu hướng đồng ý với @Matt Joiner nhưng có một thời gian để bắt đầu với phân trang của riêng bạn. Nếu anh ta biết anh ta sẽ làm việc với các tập dữ liệu lớn thì nó thực sự có ý nghĩa để bắt đầu với phân trang hơn là lãng phí thời gian vào một giải pháp ngây thơ. – BobbyShaftoe

+0

Nahhh, không có gì đảm bảo rằng "triển khai" đầu tiên của bạn thậm chí sẽ nhanh hơn "mặc định". Bạn cũng có thể bắt đầu ở phía dưới, có thể là phần trên cùng, hoặc hầu hết mọi thứ bạn đã biết cho đến khi bạn bắt đầu lược tả và tinh chỉnh từ một giải pháp làm việc. Tuy nhiên hãy ghi nhớ, hoàn toàn không có lý do chính đáng bạn không thể cẩn thận thiết kế nó, giữ hiệu suất, và tối ưu hóa thuật toán trong tâm trí từ nhận được đi. Nhưng tôi sẽ không để điều đó phát sinh chi phí thời gian phát triển cho đến khi một giải pháp làm việc có thể cung cấp một sự kiểm soát để so sánh. –

3

Hệ thống quản lý cơ sở dữ liệu thực hiện phân trang riêng cũng được hưởng lợi từ việc đầu tư các nỗ lực nghiên cứu lớn để đảm bảo các thuật toán phân trang hoạt động tốt trong các điều kiện tải và hệ thống khác nhau. Trừ khi bạn có một bộ tài nguyên tương tự theo ý của bạn, tôi khuyên bạn nên chống lại cách tiếp cận đó.

Hệ thống phân trang hệ điều hành mà bạn có theo ý của mình đã được hưởng lợi từ những nỗ lực điều chỉnh của nhiều người. Tuy nhiên, có một số điều bạn có thể làm để điều chỉnh hệ điều hành của bạn để truy cập kiểu cơ sở dữ liệu (các hoạt động I/O tuần tự lớn) so với điều chỉnh máy tính để bàn thông thường (kết hợp seq. Và ngẫu nhiên I/O).

Tóm lại, nếu bạn là một nhóm một người hoặc một nhóm nhỏ, bạn có thể nên sử dụng các công cụ hiện có thay vì cố gắng để cuộn của riêng bạn trong khu vực cụ thể đó.

+0

Vâng, tại thời điểm này, bạn không cần phải có một nhóm các nhà nghiên cứu đầy đủ theo ý của bạn để viết một hệ thống phân trang cơ bản. Chắc chắn, đã có nhiều giấy tờ viết nhưng đó là sự thật về bất cứ điều gì trong CS. Nó không thực sự là xấu để có được một cái gì đó cơ bản đi nó chỉ là một công việc tốt hơn một chút nếu bạn thực sự không cần nó ở nơi đầu tiên. – BobbyShaftoe

+0

Các hệ thống cơ sở dữ liệu thực hiện phân trang riêng của chúng chỉ là biểu hiện của hội chứng NIH và/hoặc mong muốn có hiệu suất tốt ngay cả trên các hệ điều hành bị hỏng.Giải pháp đúng là luôn luôn sử dụng hệ điều hành cho những gì nó có nghĩa là cho, và nếu nó thực hiện xấu, sửa chữa nó. Bạn có nguồn cho hệ điều hành của bạn, phải không? :-) –