Arganzheng's Blog

stay hungry, stay foolish

Bloom filter在分布式环境中的应用

概述 布隆过滤器是一个应用非常广泛的概率型数据结构,一般用于判断一个元素是否存在一个集合中,比如在字处理软件中,需要检查一个英语单词是否拼写正确(也就是要判断它是否在已知的字典中);在 缓存系统中,判断一个元素是否在缓存中;在网络爬虫里,一个网址是否被访问过等等。最直接的方法就是将集合中全部的元素存在计算机中,遇到一个新元素时,将它和集合中的元素直接比较即可。一般来讲,计算机中的集合是用哈希表(hash table)来存储的。它的好处是快速准确,缺点是费存储空间。当集合比较小时,这个问题不显著,但是当集合巨大时,哈希表存储效率低的问题就显现出来了。关于这个,只需要根据元素的数量和大小简单的计算一下就知道了。虽然可以适用分布式K-V系统(如Redis)来承载,但是成...

neo4j如何实现存在就更新,否则插入?

这个需求其实很普遍,比如我有一个节点: (n:Person {id: 'argan', name: 'argan', age: 32})。 然后用户又传递了一个person数据过来: {id: 'argan', age: 30, sex: 'male', email: 'arganzheng@gmail.com'} 可以看到更新了一个属性:age,新增了两个属性:sex和email。 我们希望最后的结果是 (n:Person {id: 'argan', name: 'argan', age: 30, sex: 'male', email: 'arganzheng@gmail.com'})。 需要注意的是name没有传递,所以还是保留着的。如果要删除一个属性,...

neo4j高效数据维护

1、如何为两个存在的顶点创建关系? 通常思路是这样子的: 先创建索引: CREATE INDEX ON :User(username) CREATE INDEX ON :Role(name) 再创建关系: MATCH (u:User {username:'admin'}), (r:Role {name:'ROLE_WEB_USER'}) CREATE (u)-[:HAS_ROLE]->(r) 注意 1、节点MATCH部分一定要走索引,否则数据量大的情况下会导致noe4j对所有的节点进行扫描过滤,直接卡死。更重要的是这个操作是有加锁的,会影响到其他读写操作。 2、关于关系如何实现存在就更新,否则插入的逻辑,可以参考笔者写的另一篇文章 neo4...

Titan的pluggable storage backend

如何实现一个Titan storage backend primary backend storage 主要实现类在 com.thinkaurelius.titan.diskstorage 下。 Titan根据后端不同的存储类型,定义了相应的接口: KeyColumnValueStore(I): Interface to a data store that has a BigTable like representation of its data. BaseKeyColumnValueAdapter(C) OrderedKeyValueStoreAdapter(C): Wraps a Ord...

DynamoDB学习笔记

数据模型 不同于Cassandra的Column family数据模型,DynamoDB的数据模型非常类似于传统的关系型数据: Tables: 类似于数据库中的table Items: 记录,类似于数据库的row Attributes: 属性,类似于数据库的column 说明 1、跟传统的RDB不同,DynamoDB是schema-less的,不需要预定义表结构,同一个表中的记录结构也不需要完全一致(但是必须包含主键属性)。 Except for the required primary key, a DynamoDB table is schemaless, which means that neither the attribut...

neo4j如何批量导入JSON数据

neo4j提供了如下批量导入工具: 通过neo4j-admin import命令可以将数据从 CSV 文件批量导入到未使用的数据库。load data into a previously unused database. 通过[LOAD CSV](https://neo4j.com/docs/developer-manual/3.2/cypher/clauses/load-csv/)语句 import small to medium-sized CSV files into an existing database. CSV数据格式参见: 10.2.2. CSV file header format。 ➜ Data head company.cs...

Aerospike学习笔记

架构 分为三层: Client Layer Distribution Layer Cluster Management Module Data Migration Module Transaction Processing Module Sync/Async Replication Proxy Duplicate Resolution Data Storage Layer enhanced key-value store with a schemaless ...

数据模型和存储系统

数据模型维度 Key-Value Stores Redis Riak(Bitcask) LevelDB RocksDB LMDB Aerospike(个人感觉这个更像是RDB) HyperLevelDB HyperDex: (Sorted) Column-family Stores HBase Cassandra Document-oriented Databases MongoDB ElasticSearch Tabular ...

Titan使用过程CPU超高问题排查

今天灵聪这边在把数据灌入到Titan发现,Titan-Server速度非常慢,而且灌到1w多条的时候系统基本不响应了。整个过程Titan server的进程使用CPU非常高,一直徘徊在2000%左右。 这其实是一个很常见的问题。思路很简单,找出哪个java线程占用了大量的CPU,查清楚耗时在哪里,依次解决就可以了。 首先找到titan server的进程号,整个用top或者ps或者jps就可以简单快速的找到。 然后查看其子线程的CPU信息: $ top -H -p 32763 top - 15:44:32 up 91 days, 20:14, 7 users, load average: 10.81, 10.77, 7.66 Tasks: 87 to...

ArangoDB的索引学习

ArangoDB索引概览 ArangoDB内建了很多索引结构,用于解决不同的应用场景(个人感觉有点过多了。。) Primary Index: 主键索引: _id, _key unsorted hash index 内存索引 Edge Index 边索引:_from, _to hash index 内存索引 Hash Index: 精确查询 unique hash index unique, sparse hash index non unique hash index ...

×