测试环境:
Intel Xeon 2.4G四核心 2.5G内存
Server 2003 Enterprise Edition Service Pack 2
Oracle9i Enterprise Edition 9.2.0.1.0
python-2.5.2
组件cx_Oracle-4.3.1-win32-9i-py25
建立测试表:
CREATE TABLE TEST
(
TEST_ID NUMBER(10, 0),
TEST_NAME VARCHAR2(50),
TEST_TIME TIMESTAMP,
TEST_VALUE NUMBER(10, 3)
);
连接Oracle过程略。
几个测试用的方法:
import random
atoz = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
def genString(length):
temp = []
for k in range(length):
temp.append(atoz[random.randint(0, 51)])
return "".join(temp)
def genDouble():
d1 = 2500 * random.random()
d2 = 500000 * random.random()
return d1 + d2
def split2(total):
splitSize = 51200
result = []
length = (total + splitSize - 1) / splitSize
for i in range(length-1):
total = total - splitSize
result.append(splitSize)
result.append(total)
return result
拼sql入库:
def simpleInsert(total):
time.sleep(3)
currentStr = time.strftime("%Y-%m-%d %H:%M:%S")
connOra = cx_Oracle.connect(connStr)
begin = time.time()
cursorOra = connOra.cursor()
for i in range(1, total+1):
sqlStr = "INSERT INTO TEST (TEST_ID, TEST_NAME, TEST_TIME, TEST_VALUE) VALUES (%s, '%s', to_date('%s','yyyy-MM-dd HH24:mi:ss'), %s)"%(i, genString(5), currentStr, genDouble())
cursorOra.execute(sqlStr)
connOra.commit()
end = time.time()
print "Count:%s Time:%s"%(total, end - begin)
cursorOra.close()
connOra.close()
测试结果:
Count:20480 Time:34.7809998989
Count:20480 Time:34.8599998951
Count:20480 Time:35.6400001049
Count:20480 Time:35.375
Count:20480 Time:35.9060001373
Count:20480 Time:34.9690001011
Count:20480 Time:35.7179999352
Count:20480 Time:35.1879999638
Count:20480 Time:36.4690001011
Count:20480 Time:35.1870000362
总结:
平均入库速度每1万条17.29秒
绑定参数法入库:
def traditionalInsert(total):
time.sleep(3)
cst = time.localtime()
current = datetime.datetime(cst[0], cst[1], cst[2], cst[3], cst[4], cst[5])
connOra = cx_Oracle.connect(connStr)
begin = time.time()
cursorOra = connOra.cursor()
cursorOra.prepare("INSERT INTO TEST (TEST_ID, TEST_NAME, TEST_TIME, TEST_VALUE) VALUES (:1, :2, :3, :4)")
for i in range(1, total+1):
cursorOra.execute(None, (i, genString(5), current, genDouble()))
connOra.commit()
end = time.time()
print "Count:%s Time:%s"%(total, end - begin)
cursorOra.close()
connOra.close()
测试结果:
Count:51200 Time:28.2030000687
Count:51200 Time:28.5160000324
Count:51200 Time:26.7349998951
Count:51200 Time:27.0309998989
Count:51200 Time:27.3910000324
Count:51200 Time:35.4370000362
Count:51200 Time:26.9070000648
Count:51200 Time:29.375
Count:51200 Time:27.7350001335
Count:51200 Time:27.5309998989
总结:
平均入库速度每1万条5.56秒
数组绑定法入库:
def arrayBindInsert(total):
time.sleep(3)
cst = time.localtime()
current = datetime.datetime(cst[0], cst[1], cst[2], cst[3], cst[4], cst[5])
splitTotal = split2(total)
connOra = cx_Oracle.connect(connStr)
begin = time.time()
cursorOra = connOra.cursor()
cursorOra.prepare("INSERT INTO TEST (TEST_ID, TEST_NAME, TEST_TIME, TEST_VALUE) VALUES (:1, :2, :3, :4)")
for smallCount in splitTotal:
tempitems = []
for i in range(1, smallCount+1):
tempitems.append((i, genString(5), current, genDouble()))
cursorOra.executemany(None, tempitems)
connOra.commit()
end = time.time()
print "Count:%s Time:%s"%(total, end - begin)
cursorOra.close()
connOra.close()
测试结果:
Count:1024000 Time:36.5779998302
Count:1024000 Time:35.375
Count:1024000 Time:37.6559998989
Count:1024000 Time:34.9060001373
Count:1024000 Time:36.5779998302
Count:1024000 Time:37.625
Count:1024000 Time:35.2809998989
Count:1024000 Time:36.1570000648
Count:1024000 Time:36.4219999313
Count:1024000 Time:37.1879999638
总结:
平均入库速度每100万条35.52秒
数组绑定法的注意事项:数组长度最好要小于65535。
python中有一个timeit专门用来测试代码执行时间的,有空可以用一用。
听说有个cython插件,代码稍加改动就可以大幅提高速度,有空可以试试。
分享到:
相关推荐
在Java中操作Oracle数据库进行批量入库时,可能会遇到性能问题,这涉及到数据库优化、批处理策略以及数据类型的选择。以下是一些关键知识点: 1. **Oracle自定义类型(Table类型)**: Oracle允许创建自定义的表...
随后,作者利用Python的多进程并行编程技术编写了程序,该程序能够将大量的气象规范报表快速地转换,并载入Oracle数据库中。Oracle数据库是一个广泛应用于企业级应用的数据库管理系统,它能够存储大量的数据,并保证...
这个过程中,可能需要用到编程语言(如Python或Java)编写脚本,或者利用专门的日志分析工具(如ELK Stack:Elasticsearch, Logstash, Kibana)。通过对日志数据的统计、可视化,可以发现服务器的使用模式,追踪异常...
数据库管理系统可能会选用MySQL或Oracle,用于存储商品信息、库存数据、交易记录等。考虑到响应式设计,可能还会利用Bootstrap或Vue.js等前端框架,确保网站在不同设备上都能良好运行。 三、需求分析 3.1 功能需求...
在系统设计阶段,我们需要考虑数据库设计,通常会采用关系型数据库如MySQL或Oracle,设计合理的数据表结构,包括商品信息表、库存表、出入库记录表等。同时,为了提高系统的响应速度和数据安全性,需要进行索引优化...
- 可能使用的开发语言有Java、Python、C#等,配合数据库管理系统如MySQL、Oracle或SQL Server。 - 前端可能采用HTML、CSS、JavaScript,配合React、Vue或Angular等框架进行构建。 7. **实施与维护** - 系统上线...
设计库存管理系统的主要目的是提高企业的库存管理水平,减少库存积压,降低运营成本,同时提升订单处理速度和客户满意度。通过自动化处理库存数据,避免人为错误,确保库存信息的实时性和准确性。 二、系统目标 1. ...
- 测试验证:单元测试、集成测试确保各模块功能正确,性能测试评估系统性能。 - 部署上线:在生产环境中安装系统,进行数据迁移和系统配置。 - 维护更新:定期修复漏洞,添加新功能,持续优化系统性能。 5. **...
开发者可能使用如Visual Studio、Eclipse或IntelliJ IDEA等集成开发环境,配合Java、C#或Python等编程语言进行开发。同时,可能使用如Spring Boot、Django或ASP.NET等框架来加速开发进程。 2. 开发过程: 开发过程...
1. **入库管理**:系统应能跟踪货物的入库流程,包括供应商信息、入库数量、日期等,确保准确记录每一批货物的来源。 2. **出库管理**:处理订单发货、退货等操作,跟踪货物的去向,同时更新库存状态。 3. **库存...
常用的开发语言可能是Java、Python或C#,框架如Spring Boot、Django或ASP.NET,配合数据库管理工具如MySQL或Oracle进行数据操作。 四、测试 测试环节包括单元测试、集成测试和系统测试,确保每一个功能都能正常工作...
还可以进行性能测试,评估系统在高并发情况下的响应速度和稳定性。 总的来说,这个毕业设计项目不仅锻炼了学生的编程技能,也让他们掌握了软件工程的完整流程,包括需求分析、系统设计、编码实现和质量保证。通过这...
系统开发通常采用B/S架构,前端使用HTML、CSS和JavaScript,构建用户界面,后端使用Java或Python等服务器端语言处理业务逻辑,数据库选用MySQL或Oracle。开发过程中,需注意代码规范,确保系统的可维护性和扩展性。 ...
5. 持续集成/持续部署(CI/CD):通过Jenkins等工具,自动化完成代码构建、测试和部署,提高迭代速度。 综上所述,仓库管理信息系统是企业实现精细化管理的关键工具,其设计和实现涉及多方面技术,包括前端界面开发...
- 功能需求:包括图书入库、出库、借阅、归还、续借、预约、查询等功能。 - 非功能需求:系统应具有良好的用户界面,稳定性和安全性,以及一定的扩展性。 2. **数据库设计** - 数据表设计:如图书表(包含书名、...
- **关系型数据库**:通常会选择如MySQL、SQL Server或Oracle等关系型数据库来存储库存数据,因为它们支持ACID(原子性、一致性、隔离性和持久性)特性,确保数据的完整性和一致性。 - **实体设计**:库存管理系统...
2. **入库管理**:记录进货信息,自动更新库存,支持批量入库操作。 3. **出库管理**:处理销售订单、领料申请等出库操作,防止超卖。 4. **库存预警**:设定安全库存水平,当库存低于预设值时触发警告。 5. **库存...
前端采用HTML、CSS和JavaScript等技术实现用户交互界面,后端则用Java、Python或.NET等语言开发服务器端逻辑,数据库选择MySQL、Oracle或SQL Server等,用于存储大量图书和用户数据。 数据库设计是核心环节,需确保...
这里可能包括操作系统(如Windows或Linux)、编程语言(如Java或Python)、数据库管理系统(如MySQL或Oracle)以及前端开发框架(如Vue.js或React)。开发平台的选择应考虑到系统的可维护性、性能和安全性等因素。 ...
1. **开发工具的确定**:选择合适的开发语言和框架,如Java、Python等,以及数据库系统如MySQL、Oracle等。 2. **系统功能设计**:基于需求分析结果,详细规划每个功能模块的具体实现细节。 3. **系统模块设计**:...