首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要关于riak-js的帮助

需要关于riak-js的帮助
EN

Stack Overflow用户
提问于 2010-10-02 11:49:23
回答 2查看 1K关注 0票数 1

我是一个使用node.js和riak的新手,正在尝试使用riak-js。我写了下面的coffeescript,用整数1..N的平方创建N个条目。这个脚本适用于N=10,如果我在db.get()中放入一个console.log()回调,我就可以打印1..10的平方。

代码语言:javascript
复制
db = require('riak-js').getClient({debug:false})

N = 10

for i in [1..N]
 db.save('Square', String(i), String(i*i))

for i in [1..N]
 db.get('Square', String(i))

我的问题是,当我放入N=1000时,我的脚本大约需要10秒才能完成。这是正常的吗?我期待的是不到1秒的时间。我在本地机器上只有一个riak节点,一个Acer Aspire 5740,i3处理器和4 4GB内存,Ubuntu10.04。对于只有内存的存储,我将$RIAK/rel/riak/etc/app.config中的storage_backend设置为riak_kv_ets_backend。riak-admin status命令可确认此设置。

Q1:也许riak-js正在为我的存储桶设置一些默认的基于磁盘的后端?我如何找出/覆盖它?

Q2:我不认为这是node.js的问题,但是我是不是在异步使用方面做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2010-10-04 16:30:16

A1: riak-js不使用任何隐藏设置,您可以自行配置Riak节点。

A2:你的脚本看起来很好,你没有做错什么。

事实是,我还没有开始进行基准测试,也没有认真考虑性能问题。

也就是说,每个请求都在内部排队,并按顺序发出。它使API变得更简单,并且不会遇到竞争条件,但它也有其局限性。理想情况下,我想围绕riak-js构建一个包装器,它将处理以下内容:

持有多个实例以在parallel

  • Automatically中发出请求的
  • 当其中一个节点宕机时重新连接到群集中的其他节点

您的示例在我的MBP上运行大约5秒(使用Bitcask)。

代码语言:javascript
复制
 =>  time coffee test.coffee 

real    0m5.181s
user    0m1.245s
sys 0m0.369s

仅作为概念的证明,请看以下内容:

代码语言:javascript
复制
dbs = [require('riak-js').getClient({debug: false}), require('riak-js').getClient({debug: false})]

N = 1000

for i in [1..N]
  db = dbs[i % 2]
  db.save('sq', String(i), String(i*i))

for i in [1..N]
  db = dbs[i % 2]
  db.get('sq', String(i))

结果:

代码语言:javascript
复制
 =>  time coffee test.coffee 

real    0m3.341s
user    0m1.133s
sys 0m0.319s

这将通过使用更多的客户端访问数据库来改善。

否则,答案是Protocol Buffers接口,这一点毫无疑问。我不能用你的例子运行它,所以我必须深入研究它。但这应该是闪电般的速度。

确保您运行的是最新的Riak (已经有了很多性能改进)。还要考虑到CoffeeScript编译的一些开销。

票数 2
EN

Stack Overflow用户

发布于 2010-10-04 17:09:33

下面是我的测试文件:

代码语言:javascript
复制
db = require('../lib').getClient({debug:false})

N = if process.argv[2] then process.argv[2] else 10

for i in [1..N]
 db.save('Square', String(i), String(i*i))

for i in [1..N]
 db.get('Square', String(i))

编译后,我得到以下时间:

代码语言:javascript
复制
$ time node test1.js 1000

real 0m3.759s
user 0m0.823s
sys  0m0.421s

在运行多次迭代之后,无论后端如何,我在该卷上的时间都是相似的。我测试了ets和dets。操作系统将在第一次运行时在特定卷上缓存您的磁盘块,但后续运行速度会更快。

在frank06 06的回答之后,我还将研究连接处理。这不是Riak的问题,而是riak-js如何建立连接的问题。还要注意,在Riak中,所有节点都是相同的,因此如果您有一个三节点集群,您将创建到所有三个节点的连接,并以某种方式轮询它们。Protobuf api是可行的方法,但在设置时需要格外小心。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3844303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档