【1】高效C++编程

CPU: I3 2.4Ghz 4核,内存8G

  • 方式一:采用其原生接口操作

JVM:-Xms1024m -Xmx1024m -Xmn512m-XX:PermSize=128m -XX:MaxPermSize=256m

4000节点(50个属性),4000关系:1秒,其间cpu使用率25%,761M

8000节点(50个属性),8000关系:2秒,其间cpu使用率25%,829M

16000节点(50个属性),16000关系:5秒,其间cpu使用率25,983M

24000节点(50个属性),24000关系:9秒,其间cpu使用率25%,1079M

32000节点(50个属性),32000关系:14秒,其间cpu使用率25%,1187M

40000节点(50个属性),40000关系:执行1多分钟以后直接报outOfMemery:
java heap space

内存使用:

结论:插入时用事务插入接口的话,在JVM 1G内存的配置下最后能够插入3万多个节点和关系,再多就内存溢出。

  • 方式二:采用BatchInserter接口

JVM:采用JVM默认设置

40000节点(50个属性),40000关系:6秒,其间CPU使用率25%,内存288M

80000节点(50个属性),80000关系:17秒,其间CPU使用率25%,内存288M

120000节点(50个属性),120000关系:31秒,其间CPU使用率25%,内存289M

200000节点(50个属性),200000关系:56秒,其间CPU使用率25%,内存288M

分析:

根据官方文档,当少量数据(根据测试观察5000条以下)插入时,建议使用事务型插入接口(即通常NEO4J的数据操作接口),速度还是可以的;当数据量比较大时,建议采用专用的BatchInserters接口,这个接口在插入时不创建事务,估计内存占用很少,基本上在不同数据量的操作期间内存无太大变化。由此可见,在向NEO4J导入大量数据时,可以有以下两种方法实现快速插入:

  1. 化大为小法

此法是将大量的数据集合分成5000条或者更少集合,使用事务型插入接口插入数据,这样整体的插入时间按照以上的测试结果,100000条数据可以在30秒内插入完毕。缺点是需要分拆数据集合为小的集合;优点是当用户已经在运行一组NEO4J的数据库时,只需改造相关的代码即可,也不需要在导入期间暂停数据库。

  1. 批量插入法

此法不管数据量多大,都可以实现快速插入,实现速度和内存的平衡,适合在初始化数据库时(或者需要大量导入数据时)一次性导入大量的数据;缺点是导入数据时要暂停数据库,采用BatchInserters接口导入,不能实现业务无中断运行。

建议:

采用化大为小法,当插入(导入)数据量大于1000个时,采用分批插入的方法,可以达到快速插入数据的目的,也能保证内存占用量不会有太大的变化而导致OOM。



【1】高效C++编程,布布扣,bubuko.com

时间: 2024-10-28 20:50:38

【1】高效C++编程的相关文章

c++ 高效并发编程

高效并发编程 并发编程的基本模型包括,通过消息机制来管理运行顺序的message passing, 通过互斥保护共享的shared memory. 线程同步的基本原则 最低限度共享变量,考虑使用immutable对象 尽量减小锁粒度 互斥器和条件变量足以完成绝大多数任务,尽量使用高层的封装 避繁就简,读写锁 信号量 可重入锁 ,慎用. 关于死锁 RAII 控制锁区间 注意锁的获取顺序 Copy On Write 减小锁粒度 只读的情况下用shared_ptr 轻量级共享数据 在发生修改的情况下,

高效Java编程工具集锦

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松.目前,市面上涌现出越来越多的高效编程工具.所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用.正在使用或将来一定会用到的高效工具.这份列表名单包括集成开发环境.集成工具.测试和质量工具等. 1.集成开发环境 Eclipse是最有名也最广泛使用的Java集成开发环境(IDE),允许开发者结合语言支持和其他功能到任何的默认包中,而且Eclipse市场有许多定制和扩展的插件. IntelliJ已经引起了开发

打造自己的高效Vim编程环境

Vim简介 Vim是从vi发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.和Emacs并列成为类Unix系统用户最喜欢的编辑器. Vim功能概要 根据设定可以和原始vi完全兼容 多缓冲编辑 任意个数的分割窗口(横,竖) 具备列表和字典功能的脚本语言 可以在脚本中调用Perl,Ruby,Python,Tcl,MzScheme 单词缩写功能 动态单词补全 多次撤销和重做 对应400种以上文本文件的语法高亮 C/C++,Perl,Java,Ruby,P

高效javascript编程必知的5个数组方法

本文和大家分享的主要是javascript中关于数组最重要的5个方法,一起来看看吧,希望对大家学习javascript有所帮助. Array.forEach() .forEach() 方法能够方便的让你 遍历数组里的每个元素 ,你可以在回调函数里对每个元素进行操作..forEach() 方法没有返回值,你不需要在回调函数里写 return ,这是无意义的. var animals = ['dog', 'cat', 'mouse']; animals.forEach(function(item){

高效awk编程第四版学习笔记

How to Run awk Programs 语法: awk 'program' input-file1 input-file2 适用于短program awk -f program-file input-file1 input-file2 用在长program awk是输入驱动的,也就是说没有输入就结束 awk模型:把输入的每一行进行检查是否满足pattern,如果满足就执行action,如果不满足,下一行处理,直到文件的末尾.另外一种模式就是BEGIN和END,这两个在主循环体内只执行一次

并发编程实践四:实现正确和高效的锁

你是否觉得锁是一种很神奇的东西,在并发编程中,你只需要将你的代码加上锁,就能保证代码是线程安全的(当然现实和感觉有很大差别,代码的线程安全是非常复杂的),那么,这些都是怎么做到的呢?当存在大量线程同时竞争锁时,竞争失败的锁会怎么做呢?锁又是怎么保证这一切高效的执行的呢?这篇文章将为你回答这些问题,首先我将介绍怎样实现一个正确的锁,然后介绍高效的锁应该具备的条件,最后将介绍两种常用的队列锁算法:CLH锁和MCS锁. 文中将用到一些原子变量的特性,你可以将原子变量看作加强版的volatile变量,具

shell 编程 之 小技巧

1 概述 本文将通过介绍shell脚本编程过程中常用的一些命令,来提高shell脚本编程的灵活性,以及高效实现编程结果 分别介绍了以下10个工具 shift,select,信号捕捉,数组,字符串处理,定义变量,eval,间接变量引用,mktemp,install 2 shift 控制循环 shift [n] n 用于将参量列表list 左移指定次数,缺省为左移一次. 参量列表list 一旦被移动,最左端的那个参数就从列表中删除.while 循环遍历位置参量列表时,常用到shift 运行  ./T

为什么函数式编程在Java中很危险?

摘要:函数式编程这个不温不火的语言由来已久.有人说,这一年它会很火,尽管它很难,这也正是你需要学习的理由.那么,为什么函数式编程在Java中很危险呢?也许这个疑问普遍存在于很多程序员的脑中,作者Elliotte对此发表了一些见解,我们一起来看看他是怎么说的. 在我的日常工作中,我身边的开发者大多是毕业于CS编程顶级院校比如MIT.CMU以及Chicago,他们初次涉及的语言是Haskell.Scheme及Lisp.他们认为函数式编程是一种自然的.直观的.美丽的且高效的编程样式.但奇怪的是,我和我

可编程的文字处理引擎TX Text Control .NET Server for Windows Forms

TX Text Control .NET Server for Windows Forms控件是一个完全可编程的,用于ASP.NET服务器环境与 Microsoft Internet Explorer的文字处理引擎.它的设计理念就是在服务器端集中文字处理过程. 具体功能: 直接在浏览器中以所见即所得方式编辑文档 TX Text Control .NET Server为您提供了一个浏览器控件,通过它可以在微软IE中以进行所见即所得模式进行文本处理,甚至使用来自不同源的数据从零开始通过编程生成文档.