Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从c++;数据库应用程序 我有一个C++应用程序,需要在数据库中记录大量数据。一般来说,这个任务是直接的,因此我可以使用C++中的任何数据库连接器,并完成任务。p>_C++_Database - Fatal编程技术网

从c++;数据库应用程序 我有一个C++应用程序,需要在数据库中记录大量数据。一般来说,这个任务是直接的,因此我可以使用C++中的任何数据库连接器,并完成任务。p>

从c++;数据库应用程序 我有一个C++应用程序,需要在数据库中记录大量数据。一般来说,这个任务是直接的,因此我可以使用C++中的任何数据库连接器,并完成任务。p>,c++,database,C++,Database,但是,我打算将任务与其他关键路径分离,或者基本上将此实用程序与主应用程序分离。你能建议一个有效的方法吗?或者向数据库写入数据本身是否足够有效/安全 我正在考虑将数据写入某个文件,并在后台运行一个单独的脚本,将附加到该文件的数据转储到数据库中。这是否合理的做法?或者写入文件是否与写入数据库一样低效/不安全 谢谢我有两个建议: (1.使用单独的低优先级线程进行数据写入 (2.使用单独的进程:生成一个“worker”或“data writer”进程,并通过管道或另一个IPC机制向其提供数据。您可以通过

但是,我打算将任务与其他关键路径分离,或者基本上将此实用程序与主应用程序分离。你能建议一个有效的方法吗?或者向数据库写入数据本身是否足够有效/安全

我正在考虑将数据写入某个文件,并在后台运行一个单独的脚本,将附加到该文件的数据转储到数据库中。这是否合理的做法?或者写入文件是否与写入数据库一样低效/不安全


谢谢

我有两个建议:

(1.使用单独的低优先级线程进行数据写入

(2.使用单独的进程:生成一个“worker”或“data writer”进程,并通过管道或另一个IPC机制向其提供数据。您可以通过单独的低优先级线程来管道传输数据。
虽然这比生成线程的工作量要大,但好处是,如果需要,您可以轻松生成许多工作进程,以便在将来进行扩展。如果工作进程崩溃,关键路径将保持完好。

我有两个建议:

(1.使用单独的低优先级线程进行数据写入

(2.使用单独的进程:生成一个“worker”或“data writer”进程,并通过管道或另一个IPC机制向其提供数据。您可以通过单独的低优先级线程来管道传输数据。
虽然这比生成线程要复杂得多,但好处是,如果需要,您可以轻松生成许多工作进程,以便在将来进行扩展。如果您的工作进程崩溃,关键路径将不会受到影响。

几年前,我一直在“谋生”,在Sql Server中更新和插入大型数据集,我绝对建议我不想走你想走的路

对于插入,在目标表中复制

对于更新,bulkcopyìn一个临时表,然后发出一个“updateinjoin”(语法见文档,或相关帖子)

您需要验证数据库的恢复模式是否合适,以避免事务日志不必要的增长。详细信息因SqlServer版本而异


当我使用它(BDLUCL C)时,BulkScript有几个缺点。如果你可以在托管C++中编码,我建议看一下提供的类。

几年前,我一直在“直播”,在SQL Server中更新和插入大数据集,我绝对建议遵循你正在考虑的路线。 对于插入,在目标表中复制

对于更新,bulkcopyìn一个临时表,然后发出一个“updateinjoin”(语法见文档,或相关帖子)

您需要验证数据库的恢复模式是否合适,以避免事务日志不必要的增长。详细信息因SqlServer版本而异


当我使用它(BcLabor C)时,BulkScript有几个缺点。如果你可以在托管C++中编码,我建议看一下提供的类。

< P>你需要问自己的问题是:

我需要耐用性吗

持久性是ACID事务的一个方面,它本质上意味着当DBMS向客户机发出事务已提交的信号时,该事务所做的更改保证是持久的。因此,即使提交后立即断电,数据也是安全的

  • 如果答案是“否”,那么您可以自由地派生一个后台线程,该线程将写入数据库,可能在“主”处理完成后很久
  • 如果该问题的答案是“是”,那么您别无选择,只能“就地”插入,或者至少确保在完成“主”处理之前背景线程已经完成
在任何情况下,正确绑定参数和准备INSERT语句都有助于提高性能


如果您选择后台线程路径,您可能希望通过消息队列传递数据,以便在“主”处理的同时写入数据库。

您需要问自己的问题是:

我需要耐用性吗

持久性是ACID事务的一个方面,它本质上意味着当DBMS向客户机发出事务已提交的信号时,该事务所做的更改保证是持久的。因此,即使提交后立即断电,数据也是安全的

  • 如果答案是“否”,那么您可以自由地派生一个后台线程,该线程将写入数据库,可能在“主”处理完成后很久
  • 如果该问题的答案是“是”,那么您别无选择,只能“就地”插入,或者至少确保在完成“主”处理之前背景线程已经完成
在任何情况下,正确绑定参数和准备INSERT语句都有助于提高性能


如果您选择后台线程路径,您可能希望在数据通过消息队列变得可用时传递数据,以便写入数据库的操作可以与“main”并行进行处理。

您对直接插入有何顾虑?使用文件方法,您将有“另一个”版本的数据需要管理。(一个在应用程序中,一个在传输文件中,一个在数据库中)-我想你应该尽量减少这个。数据库?哪个数据库?SQL?@Randy我对直接插入的关注有两个方面。一个,我想从主进程中删除不太关键的进程,另一个是速度。通过使用单独的线程来编写数据库,我可以解决第一个问题,但如果存在问题,我可以但不想这样做更好的方法。@Johnsyweb他们的意思可能是“MicrosoftSQLServer”。如果你认为他们