2010-06-30 31 views
19

Tôi không nghĩ rằng nó rõ ràng với tôi được nêu ra, là nó nhanh hơn để đọc những thứ từ một tập tin hoặc từ memcached? Tại sao?Bộ nhớ đệm, Hệ thống tệp hoặc Memcached nhanh hơn/tốt hơn?

+0

Bạn sẽ cần phải cụ thể hơn, bạn đang tập hợp dữ liệu nào và truy cập patterens, đây có phải là máy chủ lưu trữ cục bộ hoặc được phân phối không? chi phí truy cập mạng là bao nhiêu? thông tin bạn đang lưu trữ bao nhiêu? bạn đang chạy đĩa gì? –

+0

Các câu hỏi như thế này phù hợp hơn cho http://superuser.com/ –

+0

Tôi không biết nhiều về chi tiết, tôi đoán theo thuật ngữ cơ bản: thiết lập đơn giản, ứng dụng đơn giản, 1 máy chủ memcache, 100 tệp ... –

Trả lời

23

Memcached nhanh hơn, nhưng bộ nhớ bị hạn chế. HDD là rất lớn, nhưng I/O là chậm so với bộ nhớ. Bạn nên đặt những thứ nóng nhất để ghi nhớtất cả những người khác có thể đi vào tệp bộ nhớ cache.
(Hoặc người đàn ông lên và đầu tư một số tiền vào bộ nhớ nhiều như these guys :)

Đối với một số tiêu chuẩn xem: Cache Performance Comparison (File, Memcached, Query Cache, APC)

Về lý thuyết:

Read 1 MB sequentially from memory       250,000 ns 
Disk seek        10,000,000 ns 

http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf

+5

Các tiêu chuẩn bạn đã liên kết hiển thị chính xác đối diện với tuyên bố của bạn - Memcached chậm hơn so với đọc từ đĩa cục bộ. Bạn có thể làm rõ sự khác biệt không? – DOOManiac

0

Bạn đang trở nên vô cùng mơ hồ về chi tiết. Và tôi tin rằng câu trả lời mà bạn đang tìm kiếm phụ thuộc vào sự kiên trì. Theo hiểu biết của tôi, rất ít điều có xu hướng tốt hơn mọi thứ khác.

Rõ ràng là không nên đọc nhanh những thứ của hệ thống tệp (giả sử rằng đó là đĩa cứng). Ngay cả một SDD sẽ được đáng chú ý chậm hơn so với đọc trong bộ nhớ. Và lý do cho điều đó là HDD/FileSystem được xây dựng cho công suất không tốc độ, trong khi bộ nhớ DDR là nhanh chóng vì lý do đó.

Bộ nhớ đệm tốt có nghĩa là giữ các bộ phận thường xuyên truy cập trong bộ nhớ và những thứ không thường xuyên truy cập trên đĩa (lưu trữ liên tục). Bằng cách đó, trường hợp thông thường sẽ được cải thiện đáng kể nhờ việc thực hiện bộ nhớ đệm của bạn. Đó là mục tiêu của bạn. Đảm bảo bạn hiểu rõ về chính sách bộ nhớ đệm lý tưởng của mình. Điều đó sẽ yêu cầu điểm chuẩn và thử nghiệm rộng rãi.

11

Có khá một số khía cạnh khác nhau có thể có lợi cho nhau hoặc khác:

  • Bạn có cần/muốn chia sẻ dữ liệu này giữa nhiều máy chủ không? Hệ thống tập tin là cục bộ, memcached được truy cập qua mạng.
  • Các mục trong bộ nhớ đệm của bạn lớn bao nhiêu? Hệ thống tập tin có khả năng tốt hơn cho các đối tượng lớn.
  • Có bao nhiêu yêu cầu ghi nhớ có thể có trên mỗi trang? Kết nối TCP và tear-down có thể mất nhiều thời gian hơn một hệ thống tệp đơn giản() trên máy cục bộ.

Tôi khuyên bạn nên xem xét trường hợp sử dụng của mình và thực hiện một số hồ sơ về cả hai cách tiếp cận. Nếu bạn có thể lấy đi bằng cách sử dụng hệ thống tập tin thì tôi sẽ. Thêm vào memcached thêm vào một lớp phức tạp và các điểm tiềm năng của sự thất bại (memcached client/server).

Đối với những gì nó có giá trị các ý kiến ​​khác về hiệu suất đĩa và bộ nhớ cũng có thể được học tập như dữ liệu hệ thống tập tin đang được truy cập thường xuyên sau đó nó có khả năng sẽ được ngồi trong hệ điều hành hoặc bộ nhớ cache đĩa anyway.

0

Tùy thuộc vào bộ nhớ cache được lưu trữ cục bộ hay không. Memcache có thể lưu trữ dữ liệu trên một mạng, mà không nhất thiết phải nhanh hơn một đĩa cục bộ.

0

Trên thực tế, việc đọc từ bộ nhớ nhanh hơn rất nhiều so với việc đọc từ HDD.Như bạn đã biết, Memcached dựa trên kết nối tcp, nếu bạn tạo kết nối mỗi khi bạn muốn lấy sth hoặc thiết lập sth đến memcached server (hầu hết các lập trình viên làm), nó hoạt động kém hiệu quả hơn là sử dụng cache. Bạn nên sử dụng đối tượng Memcached tĩnh và tái sử dụng đối tượng. Thứ hai, các hệ điều hành hiện đại sẽ lưu trữ các tập tin thường xuyên được sử dụng, mà làm cho cache tập tin có thể nhanh hơn memcaches đó là các kết nối TCP thực tế.

2

"Nhanh hơn" không thể sử dụng được nếu không có ngữ cảnh. Ví dụ, truy cập dữ liệu trong memcached trên máy chủ từ xa có thể "chậm" do độ trễ mạng. Mặt khác, việc đọc dữ liệu từ bộ nhớ máy chủ từ xa thông qua mạng 10Gb có thể "nhanh hơn" so với việc đọc dữ liệu giống nhau từ đĩa cục bộ.

Sự khác biệt chính giữa bộ nhớ đệm trên hệ thống tệp và sử dụng memcached là memcached là giải pháp lưu bộ nhớ cache hoàn chỉnh. Vì vậy, có danh sách LRU, khái niệm hết hạn (dữ liệu mới mẻ), một số hoạt động cấp cao, như cas/inc/dec/append/prepend/replace. Memcached rất dễ triển khai và giám sát (làm thế nào chúng ta có thể phân biệt khối lượng công việc "cache" trên hệ thống tập tin, giả sử hạt nhân? Chúng ta có thể tính toán tổng lượng dữ liệu được lưu trữ? Phân phối dữ liệu? Lên kế hoạch dung lượng? Và vv).

Ngoài ra còn có một số hệ thống lai, như cachelot Về cơ bản, nó được ghi nhớ có thể được nhúng ngay vào ứng dụng, vì vậy bộ nhớ cache có thể truy cập được mà không cần bất kỳ syscalls hoặc IO mạng nào.

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