cuốn sách gpt4 ai đã làm

Lưu trữ chuỗi + mô tả trong hệ thống tệp

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 05:01:26 28 4
mua khóa gpt4 Nike

Tôi có hơn 100 triệu chuỗi để lưu trữ trong hệ thống tệp. Cùng với chuỗi (~255Chars utf8) sẽ có hai ngày tháng và một số giá trị nguyên xác định thuộc tính của chúng.

Tôi có thể đặt chúng vào tệp CSV, nhưng nó sẽ rất lớn. Tôi có thể đặt một số tệp CSV nhỏ hơn vào thư mục con để làm cho nó nhanh hơn hoặc tôi có thể chỉ cần tạo một tệp cho mỗi chuỗi và lưu trữ chúng trong cây thư mục.

Làm cách nào để biết giải pháp nào nhanh hơn và dễ dàng hơn để duy trì/phát triển? Tôi thậm chí còn không biết chuỗi của mình thưa thớt đến mức nào; có lẽ tôi có 50 triệu chuỗi bắt đầu bằng cùng một ký tự, khiến cây kém cân bằng hơn.

Bây giờ tôi nghĩ tôi có thể tạo cấu trúc thư mục với 5 ký tự đầu tiên và sau đó đặt các tệp csv vào mỗi thư mục. Ví dụ. Chuỗi "Tôi không biết mình đang làm gì" -> "Idontknowwhatimdoing" nhập vào

/i/d/o/n/t/list.csv

Có ý tưởng nào hay hơn không? Tôi không thể sử dụng Db. Tôi đang sử dụng java để lưu trữ và php để đọc từ hệ thống tệp, nếu điều đó tạo ra sự khác biệt.

câu trả lời hay nhất

  • Cơ sở dữ liệu có chỉ mục sẽ lý tưởng hơn.
  • Sau đây là những lưu ý đối với kích thước bản ghi cố định.

Nếu chuỗi của bạn là ASCII và bạn chỉ cần một byte để xác định mỗi ký tự (so với UTF8 trong đó một số ký tự có thể được mã hóa thành 4 byte), thì bạn chỉ có thể sử dụng kích thước cố định cho mỗi bản ghi Tệp phẳng. Nếu chuỗi của bạn thực sự yêu cầu UTF8 thì hãy chọn mã hóa kích thước cố định thay vì mã hóa kích thước thay đổi hoặc chỉ cần tìm chuỗi lớn nhất và sử dụng chuỗi đó làm kích thước cố định.

256 byte (chuỗi) + 8 byte (ngày) + 8 byte (ngày) + 8 byte (số nguyên) + 8 byte (số nguyên) = 288 byte mỗi bản ghi

100 triệu (mục nhập) * 288 byte (kích thước bản ghi) = 28,8 GB

Truy cập một tệp lớn như vậy có nghĩa là bạn phải sử dụngtập tin ánh xạ bộ nhớ, trong đó hệ điều hành chỉ chịu trách nhiệm đưa vào bộ nhớ phần tệp bạn hiện đang truy cập.

Nếu các chuỗi của bạn không được sắp xếp, điều mà bạn sẽ phải làm, một số biến thể sắp xếp hợp nhất có thể hữu ích, bạn hoàn toàn có thể sắp xếp một khối gồm 100 triệu chuỗi (có thể là 1 triệu phân vùng) và sau đó đặt 100 phân vùng được sắp xếp này được hợp nhất với nhau thành có được danh sách sắp xếp cuối cùng.

Cách tìm kiếm chuỗi sẽ là mộttìm kiếm nhị phân log N, đối với 100 triệu bản ghi, con số này sẽ là ~27 lượt đọc IO.

Về thuật toán - lưu trữ chuỗi + mô tả trong hệ thống tệp, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/34357113/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress