Tôi nghĩ vấn đề của bạn có thể sẽ là điểm cuối cùng:
Khi đặt hoặc thanh toán bù trừ một giá trị không nên ghi lại toàn bộ tệp cơ bản, thay vào đó nó sẽ tìm kiếm vị trí trong tệp và cập nhật giá trị.
Đây chính là điều mà DB làm - về cơ bản bạn mô tả cấu trúc bảng dựa trên tệp đơn giản.
Chúng tôi có thể minh họa sự cố bằng cách xem chuỗi.
Chuỗi trong bộ nhớ là những thứ linh hoạt - bạn không cần biết chiều dài của chuỗi trong C# khi bạn khai báo loại của nó.
Trong chuỗi lưu trữ dữ liệu và mọi thứ khác là kích thước cố định. Từ điển đã lưu của bạn trên đĩa chỉ là một tập hợp các byte theo thứ tự.
Nếu bạn thay thế một giá trị ở giữa, nó phải có cùng kích thước hoặc bạn sẽ phải ghi đè mỗi byte theo sau.
Đây là lý do tại sao hầu hết các cơ sở dữ liệu hạn chế các trường văn bản và blob thành các kích thước cố định. Các tính năng mới như varchar(max)
/varbinary(max)
trong Sql 2005+ thực sự là sự đơn giản thông minh đối với hàng chỉ thực sự lưu trữ một con trỏ tới dữ liệu thực.
Bạn không thể sử dụng các kích thước cố định với ví dụ của bạn vì nó chung chung - bạn không biết bạn sẽ lưu trữ loại nào để bạn không thể đệm các giá trị ở kích thước tối đa.
Bạn có thể làm:
class PersistantDictionary<T,V> : Dictionary<T,V>
where V:struct
... như kiểu giá trị không thay đổi trong kích thước lưu trữ, mặc dù bạn sẽ phải cẩn thận với thực hiện của bạn để tiết kiệm đúng lượng lưu trữ cho từng loại.
Tuy nhiên mô hình của bạn sẽ không hoạt động hiệu quả - nếu bạn xem cách SQL Server và Oracle đối phó với các thay đổi bảng, chúng không thay đổi các giá trị như thế này. Thay vào đó, họ gắn cờ bản ghi cũ dưới dạng ma và thêm bản ghi mới với giá trị mới.Các bản ghi cũ đã bị làm mờ được dọn dẹp sau này khi DB ít bận.
Tôi nghĩ rằng bạn đang cố gắng phát minh lại bánh xe:
Nếu bạn đang làm việc với một lượng lớn dữ liệu sau đó bạn thực sự cần phải kiểm tra bằng cách sử dụng một DB toàn diện. MySql hoặc SqlLite đều tốt, nhưng bạn sẽ không tìm thấy một thực thi tốt, đơn giản, nguồn mở và lite.
Nếu bạn không xử lý nhiều lần tải dữ liệu thì tôi sẽ gửi toàn bộ chuỗi tệp, và đã có rất nhiều đề xuất tốt ở đây về cách thực hiện điều đó.
s/persistant/dai dẳng/g – eleven81
Checkout: [ 'PersistentDictionary'] (http://izlooite.blogspot.com/2011/04/persistent-dictionary.html) lớp –
Bạn đang đùa tôi. Một câu hỏi được hỏi bởi Sam Saffron là đóng cửa như là chủ đề tắt? Bạn mọi người đang freaking điên. –