"Bây giờ - bạn sẽ giải quyết vấn đề được mô tả như thế nào?"
Với các tệp phẳng đơn giản.
Đây là lý do tại sao
Bạn có 2.000.000 thực thể. Phân vùng dựa trên số thực thể:
level1= entity/10000
level2= (entity/100)%100
level3= entity%100
Mỗi tệp dữ liệu là level1/level2/level3/batch_of_data
Sau đó, bạn có thể đọc tất cả các tệp trong một phần nhất định của thư mục để trả về các mẫu để xử lý.
Nếu ai đó muốn có một cơ sở dữ liệu quan hệ, thì hãy tải các tệp cho một entity_id đã cho vào một cơ sở dữ liệu để họ sử dụng.
Chỉnh sửa Vào số ngày.
-
date_id
/entity_id
quy tắc tính duy nhất là không một cái gì đó phải được xử lý. Nó (a) áp đặt một cách nhẹ nhàng đối với tên tệp và (b) không thích hợp cho việc truy vấn. -
date_id
"rollover" không có nghĩa gì cả - không có truy vấn, vì vậy không cần phải đổi tên bất cứ thứ gì.date_id
chỉ nên phát triển mà không bị ràng buộc từ ngày kỷ nguyên. Nếu bạn muốn xóa dữ liệu cũ, hãy xóa các tệp cũ.
Vì không có truy vấn nào dựa vào date_id
, không bao giờ cần phải làm gì với nó. Nó có thể là tên tệp cho tất cả những gì nó quan trọng.
Để bao gồm date_id
trong tập kết quả, hãy ghi nó vào tệp với bốn thuộc tính khác nằm trong mỗi hàng của tệp.
Chỉnh sửa khi mở / đóng
Để viết, bạn phải để (các) tệp đang mở. Bạn thực hiện xả định kỳ (hoặc đóng / mở lại) để đảm bảo rằng nội dung thực sự sẽ vào đĩa.
Bạn có hai lựa chọn cho kiến trúc của người viết.
-
Có một quy trình "người viết" duy nhất để hợp nhất dữ liệu từ (các) nguồn khác nhau. Điều này rất hữu ích nếu các truy vấn tương đối thường xuyên. Bạn trả tiền cho việc hợp nhất dữ liệu tại thời điểm ghi.
-
Mở một số tệp đồng thời để ghi. Khi truy vấn, hãy hợp nhất các tệp này thành một kết quả duy nhất. Điều này rất hữu ích vì các truy vấn tương đối hiếm. Bạn trả tiền cho việc hợp nhất dữ liệu tại thời điểm truy vấn.