`

大量数据导入数据库问题总结(成也索引,败也索引)

阅读更多
老板项目需要从类似日志的文本文件中提取出元数据,然后放到数据库中为数据挖掘做处理。设计数据库为两张表,初步估计第一张表是千万级的数据,第二张表是亿级数据。面对这么大数据量的导入需求,分析设计高效的程序就显得很有必要了,磨刀不误砍柴功嘛!
首先考虑的是提高IO效率,毕竟现在计算机cpu高主频,多核心的环境下硬盘IO才是瓶颈。在文件读取上提高程序效率,比如用StringBuilder代替“+”等。
其次是提高内容分析的效率,在设计内容分析程序的时候就得为大数据量和多线程考虑。1.减少复杂操作,比如提取文本文件少用正则表达式匹配,尽量定位下标,利用下标截取字符串;还有减少循环次数,尽量减少循环次数,毕竟是有上亿条数据,多一次单层循环最少就多计算若干亿次。2.程序少用或不用共享数据,例如处理类中没有类属性,这样能简化多线程程序难度。3.合理设计减少除了插入之外的其他与数据库交互行为。
最后是数据库插入程序。利用jdbc支持的批量插入,手动控制事务。这样优化的程序能达到多线讲程并发高效插入。
最后是记录下教训。因为数据是为数据挖掘准备的,在处理过程中需要频繁查询大量字段,所以数据库设计了对应的索引,索引可以极大的提高查询效率。本来为了查询方便的索引没想到确成了程序的噩梦。程序刚开始运行的时候速度就没有想象中的理想,随着程序运行,效果越来越差,效率奇低,每秒仅10条左右的速度,这到猴年马月才能导完啊!于是分析程序,开始考虑是内容提取程序的问题,原来用的是java调用C程序的动态链接库,觉得可能会有效率问题,于是用java重写原来的内容提取部分程序,单元测试效率不错。没想到整体程序还是奇慢,没多少行的代码手动检查了N遍。最后才怀疑到了数据库索引的问题,毕竟mysql索引用的是B+树,频繁插入会不断更改树的结构,这很影响效率,而且会打断批量插入的效果,于是走头无路的情况下试着删除了索引,发现速度一下就上来了。没想到当初自以为聪明设置的几条索引,让自己用了好几天的时间找bug。真是“成也索引败也索引”。大数据量导入正确的做法应该先导删除索引,待数据导完后再创建索引。
分享到:
评论

相关推荐

    实验四 存储过程、触发器与索引

    (5)将100万行网络连接监控数据Netflow导入数据库,创建多个索引,观察创建索引对数据库文件大小的影响;并设计不同的查询语句来观察索引对查询效率的影响;可以尝试将100万行记录扩展为1000万行,然后再做索引和...

    数据库非聚集索引 聚集索引 模式 索引

    此外,索引的选择也需要考虑数据库的读写比例,如果写操作远多于读,那么可能需要牺牲一些查询速度来保证写操作的效率。 总的来说,非聚集索引和聚集索引各有特点,适用于不同的场景,而索引模式的构建则是平衡查询...

    数据库索引总结.xmind

    数据库索引总结,索引的作用?索引的注意事项?数据库索引的结构?

    oracle、sql数据库批量建索引

    "iTelluro.Tools.SqlIndex"这个工具很可能是一个帮助管理和优化数据库索引的实用程序,可能提供了图形化界面或API,使得在Oracle和SQL Server之间进行索引的批量创建和删除变得更加便捷。使用这样的工具,可以大大...

    数据库 创建索引 sql oracle

    数据库索引是数据库性能优化的重要手段之一。创建索引可以提高查询速度,降低数据库的负载,提高数据的安全性。本文将详细介绍数据库创建索引的原则、分类、创建方法、管理和优化等方面的知识点。 索引的概念和优点...

    百万级数据在Excel和Sql数据库之间相互导入、导出

    1. **Excel数据连接**:利用Excel的“获取和转换”或旧版的“数据导入”功能,可以直接连接到SQL Server数据库,实时查看和编辑数据。这种方法适合小批量的数据交互,但不适合百万级数据的频繁导入导出。 2. **SQL ...

    数据库索引设计和优化

    数据库索引设计与优化是数据库管理系统中至关重要的一个环节,它直接影响到数据查询的效率、存储空间的使用以及系统的整体性能。在这个主题中,我们将深入探讨数据库索引的基础概念、设计原则、优化策略以及实际应用...

    100万条数据导入SQL数据库仅用4秒

    总结来说,实现100万条数据在4秒内导入SQL Server数据库,需要结合C#的SqlBulkCopy、异步操作、数据预处理、优化的数据库设计以及高性能的硬件配置。通过这些方法,我们可以最大化数据导入效率,应对大数据挑战。而...

    数据库索引总结

    数据库索引是数据库管理系统中用于加速数据检索的关键结构。它们的工作原理类似于书籍的目录,允许快速定位所需的信息,而无需扫描整个数据集。在SQL Server和Oracle这两个广泛使用的数据库系统中,索引的使用和管理...

    批量导入数据库中数据

    在数据库管理中,批量导入数据是一项常见的操作,尤其在处理大量结构化信息时,它可以显著提高工作效率。批量导入数据能够避免手动逐条插入的繁琐,节约时间并减少人为错误。以下将详细介绍批量导入数据库中数据的...

    Solr数据库插入(全量和增量)索引

    Solr 是一个基于 Lucene 的搜索引擎,可以快速高效地对大量数据进行索引和查询。在实际应用中,我们需要将数据插入 Solr 索引库中,以便实现高效的搜索功能。本文将详细介绍 Solr 数据库插入全量和增量索引的方法和...

    海量数据库的查询优化索引总结

    然而,创建和维护索引也会占用额外的存储空间,并可能在插入、删除和更新数据时带来额外开销,因此建立“适当”的索引至关重要。 在设计索引时,我们需要考虑以下几个因素: 1. **选择合适的索引类型**:常见的...

    利用sqlldr大量数据导入

    在数据库管理中,高效的数据导入是至关重要的,尤其是在处理大量数据时。`SQL*Loader`(简称sqlldr)是Oracle数据库提供的一种批量数据加载工具,它能够快速、方便地将大量结构化数据从文本文件导入到Oracle数据库中。...

    跟益达学Solr5之从MySQL数据库导入数据并索引

    总结,通过学习这篇文章,我们可以掌握如何利用Solr 5与MySQL的集成,有效地将数据库中的数据导入到Solr中建立索引,并进行高效查询。同时,了解Solr的基本概念、配置和操作流程,对于构建基于Solr的全文搜索引擎...

    接收NetFlow数据并导入Mysql数据库的Java工具

    标题中的“接收NetFlow数据并导入Mysql数据库的Java工具”指的是一个利用Java编程语言开发的应用,该应用能够处理从网络设备上收集的NetFlow数据,并将这些数据存储到MySQL数据库中。NetFlow是一种网络流量监测协议...

    MogoDB数据库索引与覆盖索引查询

    与关系型数据库类似,MongoDB中的索引可以帮助快速定位数据,特别是在有大量数据的集合中。索引可以包括一个或多个字段,并可以指定是升序(1)还是降序(-1)。MongoDB支持多种索引类型,包括单字段索引、复合索引...

    SQL Server 2000数据库中如何重建索引

    在SQL Server 2000中,索引是数据库中不可或缺的部分,它们加速查询性能,通过提供快速的数据访问路径。然而,随着数据的修改和更新,索引可能会变得碎片化,影响查询效率。这时,重建索引就成为了一个必要的优化...

    logstash5.6.1向es导入oracle数据库数据

    Oracle 数据库是企业级常用的关系型数据库系统,存储着大量业务数据。而Elasticsearch(ES)则是一个实时分布式搜索和分析引擎,常用于构建大规模的数据索引和检索系统。 本资源主要聚焦于如何利用Logstash 5.6.1将...

    漫谈数据库索引漫谈数据库索引漫谈数据库索引

    总的来说,数据库索引是数据库性能优化的关键要素,合理使用和设计索引可以显著提升查询效率,但同时也要注意索引维护的额外成本,因为它会影响数据的插入、更新和删除速度。因此,在数据库设计时,需要权衡查询性能...

Global site tag (gtag.js) - Google Analytics