Hãy xem xét các mô hình dữ liệu sau đây:Tài liệu tham khảo số liệu và bộ nhớ cùng phân bổ
data Artist = Artist Text
data Song = Song Artist Text
data Catalogue = Catalogue (Set Artist) (Set Song)
Bạn có thể thấy rằng Artist
s được gọi từ cả Song
s và Catalogue
. Catalogue
chứa danh sách tất cả các nghệ sĩ được đề cập đến từ Song
s, vì vậy giá trị giống nhau của Artist
được giới thiệu từ hai địa điểm.
Giả sử chúng tôi để tạo ra giá trị Catalogue
sử dụng nhiều ứng dụng của hàm sau:
insertSong :: Song -> Catalogue -> Catalogue
insertSong [email protected](Song artist title) (Catalogue artists songs) =
Catalogue (Set.insert artist artists) (Set.insert song songs)
Đó là điều hiển nhiên rằng Catalogue
sẽ được lấp đầy bởi các tham chiếu tới cùng một giá trị của Artist
như Song
s tham khảo, do đó tiết kiệm bộ nhớ bằng cách không lưu trữ các bản sao của các giá trị đó.
Vấn đề là khi tôi cố gắng tạo lại danh mục từ dữ liệu được tuần tự hóa bằng cách tách riêng một tập hợp các nghệ sĩ và một bộ bài hát, ứng dụng chiếm nhiều bộ nhớ hơn khi nó tạo cùng một giá trị Catalogue
với insertSong
. Tôi nghi ngờ rằng nó được gây ra bởi mối quan hệ bị mất giữa cùng một Artist
s được gọi từ Song
s và Catalogue
, đó là lý do tại sao tôi nhận được bản sao của các giá trị Artist
chiếm thêm bộ nhớ.
Giải pháp duy nhất tôi thấy là trước tiên deserialize bộ nghệ sĩ và sau đó để deserialize tập hợp các bài hát trong khi mạnh mẽ thay thế các giá trị của Artist
với những người từ tập đầu tiên.
Vì vậy, câu hỏi của tôi là:
- Am Tôi có ngay trong sự nghi ngờ của tôi?
- Giải pháp tôi thấy có hoạt động không?
- Có cách nào tốt hơn để giải quyết vấn đề này không?
Cảm ơn! Một ý tưởng tốt về lập chỉ mục. –