sql - 我应该如何在旧数据库中存储 500 个键值对?

标签 sql oracle database-design

我有一个包含 260 列的旧表:4 列存储全局值,256 列存储参数。我需要扩展表以存储 512 个值。

最佳解决方案是创建一个仅包含三列(id、value、parent_id)的子表,以便根据需要存储尽可能多的参数。然而,这将需要对代码进行大量重写,并且我不确定性能。

另一个解决方案是简单地扩展表(使其更宽)以存储两倍的值。这是一个更安全的解决方案,因为我需要对代码进行最少的更改。此外,新表在未来 4 年内(至少)不会被修改,因此坚持使用它可能是有意义的。

只是为了提供更多信息,我的系统没有单元测试(因此我不愿意修改代码),不使用 ORM(因此我需要在代码写入和读取数据库中进行许多更改)并且 PM 担心第一个解决方案可能比现有解决方案慢。我预计表中将存储 10000 行,因此建议的子表将约为 5M 行。

任何人都可以证明我提出的设计实际上比当前设计更快吗?设计考虑不够(当前系统有效......)。是否还有其他好的(或坏的)理由来转向提议的设计?

最佳答案

您正在查看数据库仓储和雪花之间的关键。

如果您要在这张表中处理大量读取和大量写入,那么您需要关注不同的事情。

将条目分解到“子表”后将其插入数据库现在将需要 512 次插入,而不是 1 次。但是,编辑单个参数将修改一小部分区域,不会影响其他 511 区域。

我个人认为512列有点过多,但我会考虑是否有其他关系可以变成逻辑表,而不是“我需要什么值就放在这里”的“匿名表”。

对于所有数据库事物,您能做的最好的事情就是测试它。只有您知道该表将如何最常用,并且编写插入 1M 行和读取 1M 次的测试非常容易。

关于sql - 我应该如何在旧数据库中存储 500 个键值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21679172/

相关文章:

php - 等级和经验点系统

php - Doctrine 2/DB design question : Users, Companies, UsersCompanies Reference Table, 以及在何处包含当前公司的字段?

MySQL Workbench 将列设置为 UNIQUE,但应该这样做吗?

sql - 外连接与内连接

sql - 使用 Google bigquery 的日期中的两个日期之间的区别?

Java Hibernate session 没有被正确终止

Oracle - 如何确定表是否经过 TDE 加密

database - 将每个 AWS S3 文件作为单独的行存储在数据库中?

php - MySQL LIKE 关键字多列但查询哪列?

oracle - 如何使用 NHibernate 以编程方式调用 Oracle 存储过程?