我目前正在使用mongo作为我正在研究的系统中序列化实体的脱机存储。由于这些实体会定期保存,因此我一直在使用“有序批量”操作,该操作对于大多数运行似乎都很好。
但是,由于某些原因,每次运行都会丢失一些数据,或者将其替换为空值。为了解决这个问题,我设置了一个toy example,它创建了一个图形顶点,对其进行了一些更新,然后将其保存到mongo(使用我的MongoFactory类;第63-76行准备插入) ,用于执行批处理的35-61)。然后我再更改一点顶点,然后再次保存以测试“更新”序列化版本(准备顶点更新的第79-91行)。最后,读回序列化的实体,将其解析为顶点对象(entity storage class的第349-371行),然后将其与原始对象进行比较。在大多数情况下,这会通过所有测试(Vertex equals第55-100行),并将报告以下内容:
其中第一行是所有关联边的ID,第二行是从Mongo解析回来后的顶点,其他行再次是关联边。但是,在某些情况下,不存在玩具示例第62-63行添加的属性(第二个ParTrieMap缺少prop3):
或者,或者,到目前为止,我发现的最糟糕的例子是,某些关联的边被写为空值-这里的错误是由于尝试从Mongo中读取空边而返回的,此返回“无”,因此历史列表为空:
我有点不知所措。我假设存在一些交错问题,但是当我连续进行所有操作时,这只能在Casbah方面。如果有人对为什么会这样有任何想法(我很可能会做一些愚蠢的事情),请告诉我。
提前谢谢!