我有一个关于如何解决这个问题的想法,但我想知道是否有更简单、更可扩展的方法来解决我的问题。
我正在开发的程序有两种基本形式的数据:图像以及与这些图像相关的信息。与图像相关的信息之前已存储在极其简单的 JET 数据库(四个表)中,结果证明该数据库速度缓慢且存储字段不完整。我们正在转向新的数据存储实现。考虑到所涉及的数据结构的简单性,我认为数据库是多余的。
每个图像都有自己的信息(捕获参数),将是一组相互关联的图像的一部分(例如在同一个三十分钟内拍摄的图像),然后是一个更大的图像组的一部分(拍摄同一个人) )。现在,我将人员存储在具有唯一标识符的字典中。然后每个人都有一个不同组图片的列表,每个图片组都有一个图片列表。所有这些类都是可序列化的,我只是序列化和反序列化字典。相当简单的事情。图像是单独存储的,因此字典的大小不会变得天文数字。
问题是:当我需要添加新的信息字段时会发生什么?是否有一种简单的方法来设置这些数据结构以考虑未来潜在的修订?过去,我在 C 中处理此问题的方法是创建一个包含大量空字节(至少有 k 个)的可序列化结构,以实现未来的可扩展性,结构中的一个字节表示版本。然后,当程序读取该结构时,它会根据大量 switch 语句知道要使用哪种反序列化(旧版本可以读取新数据,因为无关的数据只会进入被忽略的字段)。
C#中是否存在这样的方案?就像,如果我有一个由一组 String 和 Int 对象组成的类,然后我将另一个 String 对象添加到该结构中,如何从磁盘反序列化一个对象,然后将字符串添加到其中?我是否需要接受拥有多个版本的数据类以及一个采用反序列化流并根据基类中存储的某些版本信息处理反序列化的工厂?或者像 Dictionary 这样的类是存储此类信息的理想选择,因为它会自动反序列化磁盘上的所有字段,并且如果添加了新字段,我可以捕获异常并用空白字符串和整数替换这些值?
如果我采用字典方法,是否会影响文件读/写以及参数检索时间?我认为,如果类中只有字段,那么字段检索是即时的,但在字典中,会产生一些与该类相关的小开销。
Thanks!
Sqlite http://www.sqlite.org/就是你想要的。它是一个快速、可嵌入的单文件数据库,可以绑定到大多数语言。
关于可扩展性,您可以使用默认属性存储模型,然后为属性扩展创建一个单独的表以供将来更改。
一两年后,如果代码仍在使用,您会很高兴:1)其他开发人员不必学习定制的代码结构来维护代码,2)您可以导出、查看、修改使用标准数据库工具(有一个用于 sqlite 文件的 ODBC 驱动程序和各种查询工具)来处理数据,3)您将能够以最少的代码更改扩展到数据库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)