Am 17.04.2014 um 15:05 schrieb olivier auverlot <olivier.auver...@gmail.com>:

> thanks Robert for the explications.
> 
It’s Norbert btw. :)

> I agree with you that's the best way to remove a book is to delete the 
> reference in  ComicsCollection.
> 
> But how to do that ? Must I simply remove the reference in the ordered 
> collection ? Voyage will syncronize automatically the data in memory with the 
> content of the database ? Must I force the save of the data after removing 
> the reference ?
> 
You need to explicitly save it as we don’t have something like write barriers 
in the image. So

aComicCollection 
        removeBook: aBook;
        save

is needed.

Norbert

> Olivier ;-)
> 
> 
> 2014-04-17 14:10 GMT+02:00 Norbert Hartl <norb...@hartl.name>:
> 
> Am 17.04.2014 um 13:53 schrieb olivier <olivier.auver...@gmail.com>:
> 
> > Hi,
> >
> > I'm using Voyage in a Pharo application.
> >
> > I have two MongoDB collections which are ComicsCollection and ComicsBook. 
> > Each book is attached to a instance of ComicsCollection. The reference of 
> > each book is stored in an ordered collection (in the instance of 
> > ComicsCollection). The problem is that if I remove a book, the reference to 
> > the book is not deleted from ComicsCollection.
> >
> > How can I remove properly a book and the reference to the book ?
> >
> From the smalltalk image view the problem is usually exactly the opposite: 
> You don’t delete objects but you remove references to them. As voyage maps 
> objects it is a good idea to stay in the object realm. So you should rather 
> remove the book from the collection. This way you won’t get errors just 
> garbage. The „real“ problem that arises then is that the book would still be 
> in the database. Just like it is in the image but there is no garbage 
> collector for mongo. To decide that from the image is not possible. You load 
> only a sub graph from the database into image memory. So you don’t know if 
> there are other objects referencing the book.
> 
> If your records fit all in memory you could load all collections and books 
> and build the difference between all referenced books in the collections and 
> the total amount of books. The difference will be the set of objects not 
> being referenced by a collection and those can be deleted.
> 
> If the records do not fit in memory an alternative strategy would be needed. 
> I started to research if it is possible to build a map/reduce based garbage 
> collector for common cases but got distracted. But I have the same problem so 
> I will need to pick it up some time.
> 
> hope that helps,
> 
> Norbert
> 
> 
> 

Reply via email to