Tôi đang tìm một giải pháp để minh bạch tồn tại cấu trúc dữ liệu Perl (không phải đối tượng, nhưng hỗ trợ đối tượng sẽ là dấu cộng) mà không có tham chiếu vòng tròn. Tôi không quan tâm nhiều đến backend, nhưng tôi thích JSON hơn. Số lượng đối tượng sẽ tương đối thấp (một vài nghìn hashrefs với khoảng 5 khóa mỗi đối tượng). Bởi sự kiên trì "minh bạch" tôi có nghĩa là tôi không muốn phải thực hiện các thay đổi đối với backend lưu trữ mỗi khi tôi cập nhật cấu trúc dữ liệu trong bộ nhớ.Đơn giản, hiện đại, mạnh mẽ, minh bạch, bền vững của các kết cấu dữ liệu cho Perl
Dưới đây là cách mã sẽ lý tưởng như sau:
my $ds;
...
# load the $ds data structure from 'myfile'
print $ds->{foo}->{bar}; # baz
$ds->{foo}->{bar} = 'quux';
... program dies, but the updated %hash has been persisted automatically in 'myfile'
# in another invocation
print $ds->{foo}->{bar}; # quux
Cho đến nay tôi đã xem xét: Perl Object-Oriented Persistence lập module
- Dave Rolsky - không có thông tin cập nhật từ năm 2003
- brian d foy's MasteringPerl - Chapter 14. Data Serialization - nói về DBM :: Deep, một ứng cử viên tốt. Tôi muốn có một sự khác biệt rõ ràng hơn giữa sự tuần tự hóa và sự kiên trì trong suốt.
- Persistent - không có thông tin cập nhật từ năm 2000
- SPOPS - bị bỏ rơi từ năm 2004
- SLOOPS chỉ có một phiên bản trên CPAN, từ năm 2005
- Tangram - trông bị bỏ rơi quá
- Tie::File::AsHash không kiên trì trong suốt, nhưng chỉ hỗ trợ single-level hashes
- MooseX::Storage, Storable và JSON trông đẹp, nhưng chúng chỉ là tuần tự hóa, không tồn tại khung ence
- DBIx::Class, Class::DBI, Fey::ORM, ORM, Rose::DB là người vẽ bản đồ OO-RDBM và I'd rather not use a database backend
- DB_File đòi hỏi BerkeleyDB
- KiokuDB dường như quá phức tạp đối với các nhiệm vụ
Tôi đã chỉ tìm thấy một mô-đun đầy hứa hẹn, DBM::Deep. Mã này giống như trong ví dụ và bạn có thể tải cấu trúc dữ liệu với
my $ds = DBM::Deep->new("myfile.db");
Định dạng là nhị phân. Không phải là một vấn đề lớn, vì tôi có thể sử dụng JSON để xuất nó theo định dạng có thể đọc được.
Vì vậy, tôi thiếu mô-đun và tôi có đang tiếp cận vấn đề một cách chính xác không?
Tôi đang tìm sự kiên trì trong suốt (Tôi hy vọng đây là thuật ngữ chính xác?) Bằng sự kiên trì "trong suốt" nghĩa là tôi không muốn thực hiện các thay đổi đối với phụ trợ lưu trữ mỗi khi tôi cập nhật bộ nhớ trong cấu trúc dữ liệu. Tôi đã chỉnh sửa câu hỏi; cảm ơn vì đã chỉ ra điều này. –