Arganzheng's Blog

stay hungry, stay foolish

Aerospike UDF学习笔记

背景 很多数据存储系统都支持用户自定义函数(UDF, User-Defined Functions),Aerospike也不例外;UDF language一般是解释型的脚本语言,比如Lua(Redis,Postgres, etc.),JavaScript(ArangoDB, Cayley, etc.),Aerospike这里采用了Lua。 UDF(User-Defined Functions) code written by a user(or developer) that runs inside the Aerospike database server currently only supports Lua as the UDF languag...

快乐课程

你真的会呼吸吗?

之前对瑜伽其实大部分的了解都是停留在体式上,感觉有点类似于中国的少林易筋经,对强身健体肯定是有帮助的。 去年年初的时候,同事 @张静 在公司组织了一次瑜伽活动,请了一个印度老师过来给我们教授瑜伽。这算是一次别开生面的体验,因为这次瑜伽不只是传统上的体式学习,更多的是呼吸练习和冥想。也就是这样子,比较系统的了解了一下印度瑜伽的体系,其实体式只是瑜伽课程中的基础,更高层次的其实是呼吸和三摩地。 然后去年过年回家,老哥给我报名了一个瑜伽禅修活动,这次也挺有收获的,老师的教学其实跟印度老师的非常相似,也是不仅仅是体式训练。而是体式,行禅,加静坐。前面的体式和行禅都是为后面的静坐准备的。而且这位老师的体式动作也蛮有意思的,更像是太极,是流动的连贯动作(类似于拜日式),有一...

markdown中图片如何指定大小

Markdown让你专注于内容而不是格式,但是有时候你确实想要控制一下显示效果,比如说图片。在markdown中,图片是通过这样的方式插入的: ![test image size](/img/post-bg-2015.jpg) 显示效果如下: 可以看到默认是最大化,如果我们想要控制图片的显示大小,怎么做呢?最简单直观的做法就是使用原始的HTML标签: <img src="/img/post-bg-2015.jpg" height="100px" width="400px" > 显示效果如下: 但是这样子就不是纯粹的markdown文本了,是markdown跟html的混合体,当然图片这个html标签还算是简洁。 另一种方式就是通...

阿甘的网络日志

Hello world, hello my new blog

“Put the past behind you before you can move on.” 写博客可能是我坚持第二久的习惯吧。 大约在大三的时候就开始用QQ记事本记录一些技术文章,挺小巧的,就是不能分享出去,只是作为一个备忘录。工作之后也尝试过在一些大众博客网站上写过一段时间的博客,像CSDN,JavaEye,但是一来人气不高,二来页面和交互实在太丑,坚持不到几个月就懒得更新了,现在都忘记那些博客地址了。。直到 Markdown 的出现,让我发现原来写作可以只专注于内容,而不用太关注样式,这让写作这件事情变得有简单而有意思很多。接着又发现 Jekyll ,可以直接将纯文本(Markdown或者Textile)转化为静态网站,也就是说你只要按照 m...

redis slave的key过期机制

Redis的Scale out一直是大家关注的,因为它的单进程单线程模型,scale out基本是势在必行。对于读多写少的应用,最简单的方式就是利用Redis的Replication机制,master提供写,slave提供读。但是在 3.21 之前,由于slave所有写操作都来自于master,被动清理的key并不会发送DEL命令到slave,所以会导致一个key在master已经过期了,但是在slave上还能查到。这对于通过read only slave进行redis读扩展来说是一个不可接受的事情。 Redis的作者很早就意识到这个问题了2,而且在3.2之后也对这个问题进行了彻底的修复1。不过随着Redis 3.0集群的出现,redis的scale out有了更...

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...

×