C# 使用常规数据库(long)快速加载/存储大型树/图数据结构

C# 使用常规数据库(long)快速加载/存储大型树/图数据结构,c#,mysql,C#,Mysql,要求: 让我们来看一下传统的mysql数据库服务器。 让我们来看看使用mysql连接器的C.net应用程序。 让我们来设计一组表,以适应复杂的树/图形数据结构及其关系。 数据结构可以非常大,可以包含数百到数千个blob项,每个项10到100kiB。 允许尽可能快地从/到数据库加载/存储数据结构。 让我们对任何数据结构子项有三种可自由转换的表示:xml、内存中的C对象和sql。 当前解决方案: 它是通过某种形式的演变而产生的,这意味着没有关于适用/典型方法的大量知识也出现了——像往常一样——最初的

要求:

让我们来看一下传统的mysql数据库服务器。 让我们来看看使用mysql连接器的C.net应用程序。 让我们来设计一组表,以适应复杂的树/图形数据结构及其关系。 数据结构可以非常大,可以包含数百到数千个blob项,每个项10到100kiB。 允许尽可能快地从/到数据库加载/存储数据结构。 让我们对任何数据结构子项有三种可自由转换的表示:xml、内存中的C对象和sql。 当前解决方案:

它是通过某种形式的演变而产生的,这意味着没有关于适用/典型方法的大量知识也出现了——像往常一样——最初的需求没有那么苛刻。 每个数据结构子项实现自定义ISqlSerializable接口,其中包括ReadSql。。。和WriteSql。。。方法。受IXmlSerializable启发,由于XML序列化要求,还必须实现IXmlSerializable。 自定义反序列化程序为每个根数据结构调用此类方法。 这些调用发出用于读取/写入数据结构本身的SQL命令,然后是子级的序列化请求(如果有的话)——与IXmlSerializable使用的方法相同。 这个序列为整个树/图发出SQL代码,而不管根是什么,您可以通过调用ISqlSerializable对任何数据结构进行完全反序列化-我的意思是,根几乎可以是实现ISqlSerializable的任何结构。 问题:

这种方法非常慢,因为例如,从单个表中读取/写入N个相邻对象意味着N个选择/插入命令,而不是可能的单个有效命令。 到目前为止,为了加速加载过程,引入了一种缓存: 预删除的根结构通过数据适配器/数据集和复杂的sql命令预取所有表/行/列。 然后,所有子结构都从这样的构建缓存中读取自身,并且不向服务器发送SQL代码。 它极大地提高了速度,但仍然有很多硬连线的SQL为一些预选的根结构发出代码。 加载/存储孩子数据的责任现在由家长来承担,他们需要了解更广泛的背景,与以前的情况相比,我的其余部分到底是什么:自己处理,然后让孩子自己处理。 问题:

解决此类任务的典型方法是什么?我是说,每天做这种工作的人有什么用?我不怀疑这是某种特殊的情况。。。 很好的候选者似乎是存储过程方法: SQL/应用程序代码隔离。 更新/调优SQL代码的可能性,对应用程序代码没有/几乎没有影响。 当所有与SQL相关的东西都在服务器端运行时,效率可能会更好。 在我们重建整个应用程序之前,这是最好的方法吗? 有没有标准的方法来创建sql存储过程驱动的转换接受/生成多表数据集向mysql数据库写入/从mysql数据库读取多个表?这比简单的“hello world”示例更实用,它甚至可以在386上执行superfast?
请注意:考虑到当前状态和未来可能的改进,我不希望在第一个答案中完整地复制/粘贴源代码,只希望在这一特定领域有更多经验的开发人员提供一般的想法/想法/灵感。我希望我能处理剩下的事。谢谢

如果结构适合另一种类型的数据存储,为什么要将其存储在RDBMS中?你说让我们使用传统的mysql数据库服务器,但不是为什么。不幸的是,这是一个要求。。。例如:向后兼容,客户极不灵活。@Adam Houldsworth我想你会推荐OODBMS或ORDBMS,如果我们有充分的灵活性,你会推荐什么东西给C吗?我不知道,我必须回顾一下需求和模式。