你要如何衡量你的人生

坚持,努力,让好事发生

Neo4j是一个比较新的数据库,ETL工具较少,公司一个项目需要导入上百亿数据,想找一个最合适的方案来导入数据。
于是就想测测各种导入方式的效率以及成本

(1) 常见数据插入方式概览

目前主要有以下几种数据插入方式:

  1. Cypher create 语句,为每一条数据写一个create
  2. Cypher load csv 语句,将数据转成CSV格式,通过LOAD CSV读取数据。
  3. 官方提供的neo4j-import工具,未来将被neo4j-admin import代替
  4. 官方提供的Java API - BatchInserter
  5. 大牛编写的 batch-import 工具
  6. neo4j-apoc  load.csv + apoc.load.relationship
  7. 针对实际业务场景,定制化开发

这些工具有什么不同呢?速度如何?适用的场景分别是什么?

阅读全文 »

前一段时间有个朋友提了个问题,A和B是朋友关系,经过算法发现,A和C也是朋友关系,在cypher中怎么用A和B的关系来表示A和C的关系。

// 旧版本的语句
start n1=node(1), n2=node(1725535), n3=node(1725534)
match (n1)-[r]->(n2)
with n1 ,n2, n3, type(r) as rt
create (n1)-[:rt]->(n3)
return n1, n2, n3;

自己测试了半天发现没有办法,Cypher里定义关系时,不支持动态参数。

后来查了半天资料,发现可以用Neo4j APOC解决

最后发现有两种方式可以解决:

  1. 用Neo4j APOC,使用apoc.cypher.run可以动态构造cypher 或者 apoc.create.relationship
  2. 把一条语句拆分成两条,在第二条语句里动态拼CQL(可能会有CQL注入的风险)
阅读全文 »

 LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
 LinkedList 实现 List 接口,能对它进行队列操作。
 LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
 LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
 LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
 LinkedList 是非同步的。

阅读全文 »

首先看ArrayList的构造方法

/**
 * Constructs an empty list with an initial capacity of ten.
 */
public ArrayList() {
	this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
阅读全文 »

1千万数据(数字 英文,没有中文)导入花费 27s 932ms
1千万数据(包含中文属性)导入花费 1m 50s 9ms
1.1亿数据(1.1亿节点 1.1亿关系 2.2亿属性) 15m 9s 37ms

温馨提示:
neo4j-import和neo4j-admin import虽然功能一样,但是参数还有很多区别,neo4j-import的参数更多一些,感觉用起来更方便。
不过官方会在以后的版本里用neo4j-admin import替掉nep4j-import

2017-04-11 导入测试

(1) linux导入1000w数据

node.csv文件 数据样例

uuid:ID(Person),name:String,:Label
2a3e275d9abc4c45913d8e7e619db87a,"张忆耕",Label1
db6ee76baff64db5956b6a5deb80acbf,"傅某评",Label2
8d2f4a74e7e7429390b3389d64d77637,"王苏维",Label3
4d0a5c3fa89a49e89f81a152f2aa259c,"蓝波",Label4

relationship.csv文件 数据样例

:START_ID(Person),:END_ID(Person),:TYPE
2a3e275d9abc4c45913d8e7e619db87a,db6ee76baff64db5956b6a5deb80acbf,Relationship1
8d2f4a74e7e7429390b3389d64d77637,4d0a5c3fa89a49e89f81a152f2aa259c,Relationship2
阅读全文 »

Neo4j load csv 使用

牛刀小试

下面的例子是 把 http://data.neo4j.com/examples/person.csv 的csv文件导入到neo4j数据库里,指定的csv文件分隔符是,, 只导入第一个字段不为null的数据,根据id为唯一主键导入,导入时设置name为第二个字段,每10000条提交一次。

USING PERIODIC COMMIT 10000
LOAD CSV FROM "http://data.neo4j.com/examples/person.csv" AS line
fieldterminator ','
WHERE line[0] IS NOT NULL
MERGE (n:Person {id: toInt(line[0])})
SET n.name = line[1]
RETURN n

1、 LOAD CSV FROM "http://data.neo4j.com/examples/person.csv" 是读取文件,文件路径可以是url、可以是本地相对路径、本地绝对路径
2、 fieldterminator 是设置分隔符
3、 MERGE 是插入节点 (不存在则插入,存在则更新)


导入步骤

1、处理数据,确保数据是UTF8无BOM编码,确保数据不存在字符转义问题,确保不存在脏数据
2、检查数据一共有多少行。 如果行数和实际的有差别,检查数据或者cypher语句
3、抽样检查数据。 返回前10条。看格式是否正确,字段是否对应。是否有乱码。
4、导入数据。

如果特别熟悉了,可以直接进行第4步导入数据,如果不太确定,建议还是1-4步都执行一遍。


阅读全文 »

  因为平时需要看一些技术性的资料,所以有时候需要使用谷歌搜索,个人比较喜欢google搜索英文版。
  今天在换了一个VPN后使用谷歌,竟然使用的是其他语言,想用谷歌英文版和谷歌中文版,最后在网上找到了答案。
  http://www.google.com/ncr 谷歌搜索
  http://www.google.com/webhp?hl=en&gl=us 谷歌搜索英文版

阅读全文 »

neo4j使用里的内容有点杂,把配置择出来。
本文的主要讲述是neo4j-community-3.3.1 neo4j.conf的配置

2017-04-05 总结、翻译 neo4j-community-3.1.2的配置
2017-11-09 升级配置,使用neo4j-community-3.2.5
2017-12-03 更新博客,3.3.1和3.2.5的配置一样,结合实际使用,添加新的注释。

3.2.5 比 3.1.2 新增了 SSL system configuration 的配置

阅读全文 »

小组开小讲堂,在小讲堂上听了HashMap这部分内容,决定看源码再巩固一下。顺便分享给大家。
我参考的是的是JDK 1.8 HashMap的源码

在这之前,先问大家几个问题

  1. new一个HashMap的默认长度是多少
  2. 默认加载因子
  3. HashMap的底层存储
  4. 为什么HashMap的大小必须是2的幂次方
  5. key的Hash方法
  6. hashCode碰撞时怎么处理
  7. 扩容时怎么处理
  8. HashMap的最大长度
阅读全文 »

  markdown使用笔记

(1) 基本语法

(1.1) 标题

# 标题 

## 二级标题 

### 三级标题

#### 四级标题 

(1.2) 段落

阅读全文 »
0%