首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据存储方案中寻找SQL和二进制文件的优点

在数据存储方案中寻找SQL和二进制文件的优点
EN

Software Engineering用户
提问于 2016-06-03 04:42:55
回答 2查看 266关注 0票数 6

我正在寻找一些关于如何在一个有趣的数据存储问题中保持二进制文件和SQL数据库的某些好处的输入。

我有一种传统的自定义二进制文件格式,实质上是几百个多维数组,它们在C中被序列化为一个带有fwrite()'s‘的文件,每个文件都是一个固定大小的文件(~5MB未压缩),为了便于讨论,表示了一个“模型系统”。每个建模系统都有自己的文件。所以遗留系统只是一堆5MB文件。

我们需要以两种非常不同的方式(二进制和SQL)访问这些数据。

一种使用场景就像一个带有SQL后端的传统业务应用程序,用户需要将某些值作为web应用程序的一部分进行检索和显示(以及一些更新)。从数据的表格结构来看,它有一条通向转换为标准SQL数据库的明显路径。

但是,有时我们需要将几乎整个5MB的“建模系统”加载到内存中,并执行一些使用大多数值的复杂迭代计算,并更新建模系统中的某些其他值。我们不能访问循环中的数据库进行计算--它太慢了。在这里,需要针对SQL运行--二进制文件中快速的fread()是完美的。它将所有数据放入数组中,为复杂的计算做好准备,结果可以很容易地序列化回fwrite()文件。

还有几点是相关的:首先,我们在一个建模的系统上只做了10次计算。从那时起,该系统实际上是只读的,并最终被删除。“建模系统”不会相互交互,用户一次只在一个系统上工作。因此,我们的数据结构在每个“建模系统”的基础上是高度隔离的,实际上是一个由结构相同的数据库组成的数据库。此外,我们也不需要庞大的规模。在30以下的建模系统是所有将是有效的一次。

如何最好地将这些数据存储在web应用程序的后端?

一些想法:

  • 所有SQL,没有二进制文件。这要求重新编写计算算法,以处理SQL数据库中巨大的“天-对象”,而不是所有现有的数组。
  • 保存二进制文件,在每一轮计算之后,当用户需要通过web应用程序仔细阅读时,将相关数据(~35%)导出到SQL中,以便随时访问。问题是二进制文件与SQL表保持同步,特别是当用户通过web应用程序编辑某些SQL值时,使二进制文件过时。
  • 坚持二进制序列化数据,(以某种方式)从二进制存储中提取数据,但是为web应用程序编写提供程序的代码看起来很难看。

一定有更好的办法。

谢谢!

编辑:我们一直沿着C#/SQL/EntityFramework路线寻找一小部分数据,从数据库中获取数据的速度惊人地慢。(许多秒只是用于小子集。)记住,我们有数百个多维数组,它们横切了一个web应用程序想要的自然但非常深的OO模型。填充了OO模型后,我们将不得不重新编码计算部分。

到目前为止,这些回复和评论帮助暴露了将代码模型与存储本身分开考虑的必要性。现在的问题是如何使这种传输(a)快速,(b)明智地更新值和(c)合理的编码任务。似乎每个人都认为关系(SQL)存储是可行的。

那么,如何在SQL fast(er)中获取数据呢?数百个数组中的大多数是3-5维(问题空间中的10维),相当于外键。这将为这些键的每个唯一组合设置一个SQL表,并根据需要为值设置尽可能多的字段。我没有被锁在MS堆栈上。

我尽量不做任何进一步的范围调查。谢谢!

EN

回答 2

Software Engineering用户

发布于 2016-06-03 07:29:37

将数据放入数据库中。

编写一个函数,从数据库中提取所有数据并填充数组。

将填充的数组传递给未更改的calc函数。

使用calc函数的结果数组编写一个函数来编写数据库。

票数 4
EN

Software Engineering用户

发布于 2016-06-03 09:25:16

如今,5Mb的数据量似乎微不足道。因此,我不会担心按需退出,反序列化和操纵它。考虑到数据的数量,性能不应该是一个问题。

如果这些数据没有预计的格式更改,我将坚持这种方法。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/320165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档