我有一个场景,其中多个用户将执行导入过程,但所有用户都将为不同的客户端工作。
我有一个核心表,无论何时运行导入进程,它都会获得最多的匹配。我现在有两个选择
任何人都可以建议哪一个更好,为什么?
这次我更详细地提出了我的要求。您是否可以在完成要求后再次查看并提供您的意见。
该查询涉及我的应用程序核心功能的数据建模。
我有一个场景,多个用户将执行导入过程,但所有用户都将为不同的客户端工作。此外,同时客户端的数据可以显示给用户,也可以修改/插入,同时正在处理相同或不同客户端的导入过程。
我有2个核心表,每当导入进程运行时都会获得最多的匹配。
我现在有两个选择 1.拥有2个核心表,并通过为导入过程创建队列来执行顺序导入。
表1
ID 客户端ID 的SourceID 计数 AnotherCol1 AnotherCol2 AnotherCol3
表2
ID 客户端ID 订单ID 计数 AnotherCol4 AnotherCol5 AnotherCol6
有关导入过程的更多信息: 1.这些表不会在任何报告中使用。 2.每个导入过程将在每个表中插入20k-30k记录(7列)。一天将有大约40-50个这样的进口。 3.在导入过程中,可以由其他一些用户从这些表中检索数据,也可以INSERT OR UPDATED。 这些将成为应用程序中最可用的表之一。 5. BULK INSERT将用于插入。 6.聚簇索引位于主键上,该主键是标识列。 7.我们也在考虑表格分区。
您能否建议哪个选项更好?为什么?
此外,如果您建议使用选项2,那么在数据库中创建如此多的表不会影响性能吗?在这种情况下,我们应该为这1000个表创建一个单独的数据库吗?
这次我更详细地提出了我的要求。您是否可以在完成要求后再次查看并提供您的意见。
该查询涉及我的应用程序核心功能的数据建模。
我有一个场景,多个用户将执行导入过程,但所有用户都将为不同的客户端工作。此外,同时客户端的数据可以显示给用户,也可以修改/插入,同时正在处理相同或不同客户端的导入过程。
我有2个核心表,每当导入进程运行时都会获得最多的匹配。
我现在有两个选择 1.拥有2个核心表,并通过为导入过程创建队列来执行顺序导入。
表1
ID 客户端ID 的SourceID 计数 AnotherCol1 AnotherCol2 AnotherCol3
表2
ID 客户端ID 订单ID 计数 AnotherCol4 AnotherCol5 AnotherCol6
有关导入过程的更多信息: 1.这些表不会在任何报告中使用。 2.每个导入过程将在每个表中插入20k-30k记录(7列)。一天将有大约40-50个这样的进口。 3.在导入过程中,可以由其他一些用户从这些表中检索数据,也可以INSERT OR UPDATED。 这些将成为应用程序中最可用的表之一。 5. BULK INSERT将用于插入。 6.聚簇索引位于主键上,该主键是标识列。 7.我们也在考虑表格分区。
您能否建议哪个选项更好?为什么?
此外,如果您建议使用选项2,那么在数据库中创建如此多的表不会影响性能吗?在这种情况下,我们应该为这1000个表创建一个单独的数据库吗?
答案 0 :(得分:3)
这并不是一个确定答案的问题,因为每个人都有自己的利弊。
场景1:中央核心表
场景2:300个核心表
最后答案是真正适合你的
答案 1 :(得分:2)
另一种选择是第三种情况,你有一个表,但是你仍然可以通过在表中使用批处理标识符来并行进行导入,这会阻止人们互相踩踏。
在同一个表中拥有多个人的主要问题是你不能做像TRUNCATE这样的事情。
对我而言,决定将与数据最终的位置有关。这只是一个方便的临时表,因为在加载后会有一些用于转换或查找的SQL运行吗?是否可以在单独的数据库或模式中创建这样的表,并使用唯一的名称来清除它们,而不会干扰或膨胀主数据库中的事务日志>您是否需要批量插入,然后应用索引并最终删除表?如果您使用SSIS加载数据,这样的表甚至是必需的,您通常可以在管道中做很多工作而不需要临时表吗?
所有这些都会影响我在架构上的决策过程。