2009-01-14 82 views
0

我最感兴趣的是面向大量面向对象的突变数据的进程内(单用户)解决方案,其中数据的任何部分都可能发生变化。这种系统通常遭受这些问题:你使用什么文件格式为你的应用程序,为什么?

  • 从头开始编写大型文件出来是低效
  • XML是太冗长
  • SQL斑点是不是一个很好的匹配

那么,你如何做它?

+0

我不确定问题的确切位置:每个对象都很大,还是它有很多很多?为什么“* SQL blob *”?是否有任何理由不能将对象映射到正确结构化的关系表? – mirod 2009-01-14 13:57:35

+0

每个对象都很小,但有很多。我事先不知道它们的格式,因为它可能在组件插件dll中定义。每个对象都负责自己的格式。 – 2009-01-14 14:11:39

回答

1

这取决于您的要求。你会诚实地使用XML或SQL斑点高分辨率的图片或音频?

我再次阅读你的问题:如果你有一堆任意对象要存储在一个文件图像中,让它们进/出的方式是复制和重定位。 out-copy可以从GC获得帮助。副本内容非常简单,主要取决于重定位程序。

如果需要处理非常大的文件,我会在该系统中提供一些方法来标记对象的“脏”,并标记它们实际位于文件映像中的位置。

除非你永远不会删除任何东西,否则还需要在删除的对象中标记。

0

我们主要使用二进制数据。除非它必须是人类可读的(如设置和用户首选项)。

如果您认为xml过于冗长,请查看JSON。我认为这是一个非常好的选择。

+0

是的,但怎么样?!我认为任何ASCII格式都会过于冗长 – 2009-01-14 14:13:07

0

“从头开始写大文件效率低下”什么?很少有事情和文件I/O一样快。请提供一些示例或数据来备份您的声明,即文件I/O效率低下。

大多数面向对象系统可以将对象序列化或腌制到文件中。这是可能的最快I/O。另外,大多数面向对象系统可以将对象转换为标准表示形式,如XML或JSON或YAML。

JSON/YAML不像XML那样冗长而且更容易解析。

2

或映射使用几种现成的解决方案之一。

0

我将YAML用于中小文件,非常容易解析和保存。 JSON是一个值得选择的选择。

0

您可以尝试序列化到XAML而不是XML。 这可以创建更小的文件,读写速度更快(序列化/反序列化)。

显然,依赖于XAML是一个选项。

0

您需要O/R映射或像db4o这样的对象数据库。

如果是一个相对独立的对象集合,也可以将每个对象存储到自己的文件中,并且只能在对象脏时写入。但是,显然在更复杂的情况下,保持引用直线并避免无意的目录结构可能需要很多工作,而这正是O/R映射器和对象dbs带来的。

至于XML过于冗长,通常可以通过压缩来解决(例如,zip中的xml)。

0

对于大型数据集,我使用结构化二进制文件,没有什么更节省空间和时间。

对于结构化文本数据,我会使用s表达式(即,e-LAML)或 来减少在i表达式中实现的圆括号LAML。

相关问题