Nội dung của tệp có thay đổi không? Nếu nó tĩnh hoặc tương đối tĩnh, bạn có thể xây dựng danh sách các khoảng trống nơi bạn muốn đọc dữ liệu của mình. Ví dụ, nếu những thay đổi tập tin mỗi năm một lần, nhưng bạn đọc nó hàng trăm lần mỗi ngày, sau đó bạn có thể trước khi tính hiệu số của các dòng bạn muốn và nhảy trực tiếp với họ như thế này:
$offsets = array();
while ($line = fread($filehandle)) { .... find line 10 .... }
$offsets[10] = ftell($filehandle); // store line 10's location
.... find next line
$offsets[20] = ftell($filehandle);
và Sớm. Sau đó, bạn có thể trivially nhảy đến vị trí của dòng như thế này:
$fh = fopen('file.txt', 'rb');
fseek($fh, $offsets[20]); // jump to line 20
Nhưng điều này hoàn toàn có thể là quá mức cần thiết.Hãy thử điểm chuẩn các hoạt động - so sánh phải mất bao lâu để thực hiện "đọc 20 dòng" cũ kỹ so với tính toán trước/nhảy.
Nguồn
2010-04-09 02:41:25
Hãy bình luận về downvote – Yacoby
Cơ sở dữ liệu đó sẽ nhanh hơn là chủ quan. Nếu thông tin mà anh ta đang cố gắng truy cập nằm ở đầu tệp, nó sẽ nhanh hơn rất nhiều. Đọc từ cơ sở dữ liệu vẫn đang đọc từ một tệp. Anh ta sẽ được cải thiện từ chỉ mục cơ sở dữ liệu chỉ khi anh ta đang tìm kiếm thứ gì đó từ đầu tệp của mình. Nó cũng phụ thuộc vào những gì ông đang cố gắng để đạt được chính xác. –
Ông không bao giờ nói rằng cơ sở dữ liệu sẽ nhanh hơn. Chỉ có điều đó sẽ tốt hơn. Mối quan tâm của OP có thể được coi là một vấn đề của bộ nhớ hơn là tốc độ. – webbiedave