2009-05-11 57 views
19

Trang web tôi đang phát triển trong php làm cho nhiều yêu cầu cơ sở dữ liệu MySQL trên mỗi trang được xem. Mặc dù nhiều yêu cầu nhỏ với chỉ mục được thiết kế phù hợp. Tôi không biết nếu nó sẽ có giá trị trong khi để phát triển một kịch bản bộ nhớ cache cho các trang này.Tốc độ truy cập tệp so với tốc độ truy cập cơ sở dữ liệu

1) Tệp I/O thường nhanh hơn yêu cầu cơ sở dữ liệu? Điều này phụ thuộc vào máy chủ? Có cách nào để kiểm tra số lượng máy chủ của bạn có thể xử lý không?

2) Một trong số các trang kiểm tra cơ sở dữ liệu cho tên tệp, sau đó kiểm tra máy chủ để xem có tồn tại hay không, sau đó quyết định nội dung sẽ hiển thị. Điều này tôi sẽ giả định sẽ được hưởng lợi từ một lần xem trang được lưu trữ?

Ngoài ra nếu có bất kỳ thông tin nào khác về chủ đề này mà bạn có thể chuyển tiếp tôi đến đó sẽ được đánh giá cao.

Cảm ơn

Trả lời

10

Nếu bạn đang truy cập nhiều quyền truy cập (tra cứu tên tệp, v.v.), bạn có thể hưởng lợi từ memcached. Bạn có thể lưu trữ dữ liệu "nóng nhất" (được tạo gần đây nhất, được sử dụng gần đây, tùy thuộc vào ứng dụng của bạn) trong bộ nhớ, sau đó chỉ truy vấn DB (và các tệp có thể) khi bộ đệm ẩn. Truy cập bộ nhớ ở xa, nhanh hơn nhiều so với cơ sở dữ liệu hoặc tệp.

Nếu bạn cần quyền truy cập ghi nặng, cơ sở dữ liệu là cách để thực hiện. Nếu bạn đang sử dụng MySQL, hãy sử dụng các bảng InnoDB hoặc một công cụ khác hỗ trợ khóa cấp hàng.Điều đó sẽ tránh mọi người chặn trong khi một người khác viết (hoặc tệ hơn, viết anyway).

Nhưng cuối cùng, nó phụ thuộc vào dữ liệu.

4

Điều này thực sự phụ thuộc vào nhiều yếu tố. Nếu bạn có một cơ sở dữ liệu nhanh với nhiều dữ liệu được lưu trong bộ nhớ RAM hoặc hệ thống RAID nhanh, rất có thể là xấu, bạn sẽ thu được nhiều từ bộ nhớ đệm hệ thống tệp đơn giản trên máy chủ web. Cũng nghĩ về khả năng mở rộng. Dưới khối lượng công việc cao, một cơ chế lưu bộ nhớ đệm đơn giản có thể dễ dàng trở thành một cổ chai trong khi cơ sở dữ liệu được thiết kế tốt để xử lý các tải công việc cao.
Nếu không có quá nhiều yêu cầu và bạn (hoặc hệ điều hành) có thể giữ bộ nhớ cache trong RAM, bạn có thể đạt được một số hiệu suất. Nhưng bây giờ câu hỏi đặt ra, nếu nó là thực sự cần thiết để thực hiện bộ nhớ đệm dưới tải công việc thấp.

11

Tùy thuộc vào cách dữ liệu được cấu trúc, số lượng và tần suất thay đổi.

Nếu bạn có số lượng tương đối nhỏ, dữ liệu tương đối tĩnh với mối quan hệ tương đối đơn giản - thì tệp phẳng là công cụ thích hợp cho công việc.

Cơ sở dữ liệu quan hệ tự đi vào khi kết nối giữa dữ liệu phức tạp hơn. Đối với các bảng tra cứu cơ bản, chúng có thể hơi quá mức.

Nhưng nếu dữ liệu liên tục thay đổi thì có thể dễ dàng sử dụng cơ sở dữ liệu hơn là xử lý cấu hình bằng tay - và với lượng lớn dữ liệu, với tệp phẳng bạn gặp vấn đề bổ sung làm thế nào để bạn tìm thấy một chút mà bạn cần, hiệu quả.

+2

Cơ sở dữ liệu khác cung cấp tệp phẳng không đồng thời kiểm soát. Trong một bối cảnh viết nặng nề, nhiều quy trình ghi vào một tệp phẳng có thể có vấn đề. Sự thỏa hiệp tốt đẹp giữa các tệp tùy chỉnh, tệp phẳng và RDBMS đầy đủ là SQLite - có nhiều hơn một vài trang được hỗ trợ SQLite. –

3

Từ quan điểm hiệu suất đơn giản, điều chỉnh khôn ngoan hơn là điều chỉnh máy chủ cơ sở dữ liệu và không làm phức tạp logic truy cập dữ liệu với bộ đệm tệp trung gian. Một máy chủ cơ sở dữ liệu tốt sẽ tự thực hiện bộ nhớ đệm nếu kết quả có thể lưu vào bộ nhớ cache. (Tôi không chắc chắn những gì là teh trường hợp với mysql).

Nếu bạn gặp sự cố về hiệu suất, bạn nên lập hồ sơ các trang để xem các nút cổ chai thực sự. Ngay cả khi bạn giống tôi - một fan hâm mộ của các mã được tối ưu hóa, việc đặt một phần cứng mạnh hơn/nhiều hơn vào phương trình là rẻ hơn về lâu dài.

Nếu bạn vẫn cần sử dụng bộ nhớ cache, hãy cân nhắc sử dụng giải pháp hiện có, như memcached.

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