Node.js 你觉得里亚克的水桶有多大?(以MB为单位,忽略备份)

Node.js 你觉得里亚克的水桶有多大?(以MB为单位,忽略备份),node.js,riak,Node.js,Riak,我正在使用riak作为数据存储解决方案构建node.js应用程序。 应用程序将允许用户存储一些数据。我想要一些方法来跟踪单个用户使用了多少空间(1个用户->x个存储桶)。我还想忽略分发的副本(只计算1个副本) 我找不到任何东西来计算所使用的近似空间。使用node.js脚本很好,不过我更喜欢在数据库中(以分布式方式)执行此操作 有人知道这样做的最佳方法吗?我是Riak noob,但根据我所知,我的第一反应是查看提交后挂钩,在那里您可以访问对象和属性,包括大小,我相信。然后,您可以在跟踪使用情况的单

我正在使用riak作为数据存储解决方案构建node.js应用程序。 应用程序将允许用户存储一些数据。我想要一些方法来跟踪单个用户使用了多少空间(1个用户->x个存储桶)。我还想忽略分发的副本(只计算1个副本)

我找不到任何东西来计算所使用的近似空间。使用node.js脚本很好,不过我更喜欢在数据库中(以分布式方式)执行此操作


有人知道这样做的最佳方法吗?

我是Riak noob,但根据我所知,我的第一反应是查看提交后挂钩,在那里您可以访问对象和属性,包括大小,我相信。然后,您可以在跟踪使用情况的单独存储桶中调整这些值。不过,不确定提交前或提交后钩子是否被约束到触发钩子的对象上的操作。也许在post-commit钩子中,可以根据文件的大小为相关对象添加一个二级索引,您将来可以通过MapReduce访问该索引

如果我想的太多,我很抱歉……这似乎是个有趣的问题,所以我很想看看你是如何解决的。我一直想自己玩钩子,但没有机会


可以通过mapreduce查询检索bucket(或任意记录集)中数据的当前总大小。这将提供大小,而不管记录存储在何处以及保存的副本数量。因为我找不到任何实际返回数据大小的mapreduce函数,所以我创建了一个。这称为map\u datasize,可以找到

对整个bucket的内容运行此mapreduce查询可能会非常慢,并且会给系统带来一些负载(不建议在整个bucket上运行mapreduce作业),但如果只需要偶尔确定大小,则可能会使用此查询


如果您总是需要最新的数据,我认为post commit hook(正如另一篇文章中所建议的那样)可能是一个更好的选择,尽管保持它的准确性可能有点棘手,因为我不确定您是否能够访问更新时被替换的记录的大小,以便计算大小的变化

如前几篇文章所述,有两种方法可以做到这一点:

  • 执行post-commit钩子是最好的选择,如果您在map/reduce作业中实现它,那么您可以在对象的内容上使用byte_大小(见下文)

  • 执行map/reduce作业、签出及其
    map\u datasize
    功能

  • erlang提交挂钩

    update_bucket_size_hook(Object) ->
    my_hooks_utils:update_bucket_size(riakc_obj:key(Object), 
      erlang:byte_size(riak_object:get_value(Object))).
    

    好的,我来看看挂钩。我正在考虑缩小地图,并没有注意到任何尺寸的访问。