我需要在Oracle中快速插入许多小行.(5个领域).
使用MySQL,我将插入分成100个组,然后对每组100个插入使用一个insert语句.
但是对于Oracle,用户反馈是质量插入(1000-30000之间)太慢.
是否有类似的技巧可以用来加速从Java到Oracle的程序化插入?
假设您有一个可以跨多个对象执行某些操作的业务逻辑方法.也许您想要为从列表中选择的每个人拨打一个抽奖号码选择网络服务.在Java中,代码可能如下所示:
Set<Person> selectedPeople = ... // fetch list of people
for ( Person person : selectedPeople ) {
String lotteryNumber = callLotteryNumberWebService( person );
// ...
}
Run Code Online (Sandbox Code Playgroud)
注意,彩票号码网络服务可能具有副作用,例如记录该人已请求彩票号码(可能对他们的账户收费),因此即使一个人的网络服务呼叫失败,其他人也可能成功.这些信息(彩票号码)需要反馈到更高级别(视图).
如果这是发生单个操作的情况,则业务逻辑方法可以返回单个值(例如,抽奖号码)或抛出异常以及失败的任何细节.但对于批量操作,一些操作可能会成功,一些操作可能会失败.
这似乎是许多应用程序中会出现的一种问题,应该有一种干净的方法来处理它.那么,将这种类型的信息从业务逻辑层反馈到应用程序中的另一层(如视图)的最佳方法是什么,最好是以可以重用于不同类型的数据和操作的通用方式?
我有一个 Oracle 服务器,我需要使用 python 将数据提取到文件中。这些文件被下游系统用作输入。
一些技术细节:
Oracle 和 Python 运行在不同的服务器上。数据库由客户端托管,而所有脚本都在 AWS RHEL EC2 服务器上运行。此屏幕截图中突出显示了 EC2 实例的详细信息。
。
我的方法 为此,我选择 Python 的 Pyodbc 库连接到远程 Oracle 客户端并使用 SQL 查询提取数据。下面是根据提供的 SQL 查询获取数据的代码摘录。
def fetch_data_to_file(self,curr,query,dataset):
try:
self.logger.info('Executing query: {}'.format(query))
start = time.time()
curr.execute(query)
query_time = time.time()-start
start = time.time()
rowcount=0
with open(dataset,'a+') as f:
writer = csv.writer(f,delimiter='|')
writer.writerow([i[0] for i in curr.description])
self.logger.info('Writing file: {}'.format(dataset))
while True:
rows = curr.fetchmany(self.batch_limit)
self.logger.info('Writing {} rows'.format(self.batch_limit))
rowcount+=len(rows)
if not rows:
break
self.timer.info('{} Query Execution Time: {} seconds'.format(dataset,query_time)) …Run Code Online (Sandbox Code Playgroud)