存储大对象
本文关键字:对象 存储 | 更新日期: 2023-09-27 18:36:34
存储大物体的最佳方法是什么?就我而言,它类似于树或链表。
我尝试了以下方法:
1) 关系数据库
不利于树结构。
2) 文档数据库
我尝试了RavenDB,但是当我调用SaveChanges方法时,它引发了System.OutOfMemory异常
3) .网络序列化
它的工作非常慢
4) 普罗托布夫
它不能反序列化List<List<>>
类型,并且不确定链接结构。
所以。。。?
你提到 protobuf - 我经常将 protobuf-net 与大小为数百兆字节的对象一起使用,但是:它确实需要适当地编写为 DTO,理想情况下写为树(不是双向图,尽管在某些情况下支持这种用法)。
在双向链表的情况下,这可能意味着简单地:将"上一个"链接标记为未序列化,然后在反序列化后的回调中进行修复,以正确设置"上一个"链接。通常很容易。
您是正确的,因为它当前不支持嵌套列表。通过使用具有列表的内容列表来回避这通常是微不足道的,但我很想让它隐含 - 即库应该能够在不需要更改模型的情况下模拟这一点。如果你对我这样做感兴趣,请告诉我。
如果您有想要序列化的模型的具体示例,并希望我提供指导,请告诉我 - 如果您不能在此处发布,那么我的电子邮件在我的个人资料中。完全取决于你。
您是否尝试过 Json.NET 并将结果存储在文件中?
选项 [ 2 ] : NOSQL ( 文档 ) 数据库
我建议卡桑德拉。
来自卡桑德拉维基,
Cassandra's public API is based on Thrift, which offers no streaming abilities
any value written or fetched has to fit in memory. This is inherent to Thrift's
design and is therefore unlikely to change. So adding large object support to
Cassandra would need a special API that manually split the large objects up
into pieces. A potential approach is described in http://issues.apache.org/jira/browse/CASSANDRA-265.
As a workaround in the meantime, you can manually split files into chunks of whatever
size you are comfortable with -- at least one person is using 64MB -- and making a file correspond
to a row, with the chunks as column values.
因此,如果您的文件<10MB,您应该没问题,只需确保限制文件大小,或将大文件分解成块。
CouchDb 在这样的挑战方面做得很好。
在 CouchDb 中存储一棵树
在关系数据库中存储树