Re: SimBase 的新版模型和命令

53 views
Skip to first unread message

Mingli Yuan

unread,
Dec 24, 2013, 9:13:25 AM12/24/13
to cn-cl...@googlegroups.com, pyth...@googlegroups.com, TopLanguage
嗨,各位平安夜愉快,

经过一段时间的开发,Simbase 的核心命令(README里列出来的)已经初步完成。
虽然还有一些必须的功能没有完成(存储等),但是各位目前可以直接拿 redis-cli 直接连上去了。


这个项目的背景:

最近几年中小的内容网站都开始提供内容推荐了,但推荐引擎却没有很多开源的实现。
虽然 Google、Baidu 等肯定有自己的方法,可我们这些中小内容网站没有办法获得他们的解决方案。
同时,他们的解决方案应该是面向非常庞大的数据集合的,对中小内容网站没有必要。

我们的方案:

原理上是非常朴素的实现,就是对每个元素维护一个推荐列表,插入新元素的时候,对比每个老元素去更新这个列表。虽然非常简单,却足够好用。

CPU和内存耗用不算特别高,可以支持到几十万大小的文档集合。


嗨,各位,
上次在邮件组提到我们的开源项目 SimBase,大家有一些意见,但我没有回复。
因为我们有改版的计划。这次改版吸收了大家的意见。
新版本的概念模型和命令集合:
https://github.com/guokr/simbase/blob/develop/README.md
目前我们正在开发之中,好多代码都完全重写。
服务器的代码借鉴了沈峰的 httpkit (因为代码没完成,Apache License 会随后补上)
希望大家多指正。
明理

Mingli Yuan

unread,
Dec 27, 2013, 8:39:01 AM12/27/13
to cn-cl...@googlegroups.com, pyth...@googlegroups.com, TopLanguage
先说一下复杂度,Redis的操作都是常数时间C的或者接近常数时间的Log(n)的。但 Simbase 不同,它是线性的时间复杂度,即 n 的。原因很简单,随着推荐项目越来越多,彼此之间的对比也越来越多,所以很难做成常数时间的。

基础概念在README里已经有介绍,主要是向量基、向量集合和推荐关系三个核心概念。

实现的包结构如下:
引擎层主要负责读写线程的分离,每个向量基只有一个写线程,但可以有多个读线程。向量基的写线程也负责其下的各个向量集合和推荐关系的写操作。这样只有一个写线程,可以避免非常复杂的异步处理逻辑。

存储层是整个数据结构的实现,我们主要采用大数组来避免大量对象的创建。存储格式我们支持稠密和稀疏两种,但目前稀疏存储格式还没来得及仔细调试优化。

打分函数目前支持 cosine 平方和 Jensen-Shannon 分离度两种。

向量集合之间的推荐关系的维护主要是通过事件监听机制实现的。

以上是大体介绍。

明理


2013/12/24 Mingli Yuan <mingl...@gmail.com>

Mingli Yuan

unread,
Jan 13, 2014, 4:30:14 AM1/13/14
to cn-cl...@googlegroups.com, pyth...@googlegroups.com, TopLanguage
https://github.com/guokr/simbase

刚刚发布了 Simbase v0.1.0 alpha ,欢迎大家多提意见!还要经过几轮改进才能稳定下来。


2013/12/24 Mingli Yuan <mingl...@gmail.com>

Mingli Yuan

unread,
Jan 25, 2014, 8:54:50 PM1/25/14
to cn-cl...@googlegroups.com, pyth...@googlegroups.com, TopLanguage
Simbase v0.1.0-alpha3 发布,这一周取得许多进展,我们修掉了好多bug,增强了一些关键特性。
  • 现在Simbase可以支持任意的向量了,不一定非得是概率值了;
  • 修改了内存结构,使得运行速度增长随着规模增长保持线性;
  • 提高了运行速度7倍
目前加操作的运行速度可以跑到 10 万 1024 维向量情况下0.14秒一个;如果线性关系可以顺利外推,那么非常可能可以跑到 70 万 1024 维向量情况下一秒一个

70 万 1024 维向量情况下一秒一个,这意味着对大多数中型网站,几十万文档、一百万用户,我们可以顺利的支持他们推荐引擎的开发。



2014-01-13 Mingli Yuan <mingl...@gmail.com>

Mingli Yuan

unread,
Jun 4, 2014, 6:46:07 AM6/4/14
to cn-cl...@googlegroups.com, pyth...@googlegroups.com, TopLanguage
Simbase v0.1.0-beta1 发布,这半年来我们修掉了好多bug,系统在我们这里线上也一直运行的非常稳定。所以觉得是时间发布 beta 版本了。这个版本没有大的特性增强。

文档部分增加了一个示例,可以说明使用的大致流程:

Setup

> bmk b2048 t1 t2 t3 ... t2047 t2048
> vmk b2048 article
> vmk b2048 userprofile
> rmk userprofile article cosinesq

Fill data

> vadd article 1 0.11 0.112 0.1123...
> vadd article 2 0.21 0.212 0.2123...
...    

> vadd userprofile 1 0.11 0.112 0.1123...
> vadd userprofile 2 0.21 0.212 0.2123...
...

Query

> rrec userprofile 2 article

Mingli Yuan

unread,
Jun 5, 2014, 7:34:21 AM6/5/14
to cn-cl...@googlegroups.com, pyth...@googlegroups.com, TopLanguage
我又在 README 里增加了 Python 和 Node.js 的示例。

Python example

import redis

dest = redis.Redis(host='localhost', port=7654)
schema = ['a', 'b', 'c']
dest.execute_command('bmk', 'ba', *schema)
dest.execute_command('vmk', 'ba', 'va')
dest.execute_command('rmk', 'va', 'va', 'cosinesq')

Node.js example

var redis = require("redis"), client = redis.createClient(7654, 'localhost');

client.send_command('bmk', ['ba', 'a', 'b', 'c'])
client.send_command('vmk', ['ba', 'va'])
client.send_command('rmk', ['va', 'va', 'cosinesq'])

Mingli Yuan

unread,
Jun 13, 2014, 6:11:46 AM6/13/14
to cn-cl...@googlegroups.com, pyth...@googlegroups.com, TopLanguage
竟然在 Twitter 上被 Redis 之父 @antirez 转发了!!兴奋!

haosdent

unread,
Jun 13, 2014, 6:57:18 AM6/13/14
to cn-cl...@googlegroups.com, pyth...@googlegroups.com, TopLanguage
v5


--
中文社区博客:http://blog.clojure.cn/
中文问答网站:http://ask.clojure.cn/
中文邮件列表:https://groups.google.com/d/forum/cn-clojure?hl=zh-CN
---
您收到此邮件是因为您订阅了Google网上论坛中的“CN-Clojure”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到cn-clojure+...@googlegroups.com
要发帖到此论坛,请发送电子邮件至cn-cl...@googlegroups.com
通过http://groups.google.com/group/cn-clojure访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout



--
Best Regards,
Haosdent Huang

宋冰威

unread,
Jun 15, 2014, 11:30:11 PM6/15/14
to cn-clojure
厉害
Reply all
Reply to author
Forward
0 new messages