Norbert,

Sorry for my mistake ;-)



2014-04-17 15:18 GMT+02:00 Norbert Hartl <norb...@hartl.name>:

>
> 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