如何使用Python获取给定rethinkdb数据库的大小?我想要这个,因为我正在为rethinkdb开发一个多用户图形前端,并希望能够为每个用户的数据库强制执行配额。
下面的内容会很棒:
r.db('thedatabase').size().run()
50gb
答案 0 :(得分:3)
RethinkDB没有用于此类操作的内置命令。
最简单的解决方案可能是在他们自己的(有限的)分区上启动多个RethinkDB实例(使用Docker可能会使这里的事情变得更容易)。
答案 1 :(得分:3)
我知道这是一个迟到的答案,并不像你要求的那样漂亮,但只是将它放在这里,以供将来寻找此功能的人使用:
执行此操作的一种方法是访问RethinkDB虚拟数据库rethinkdb
。里面有一个统计表,其中包含大量有关数据库使用情况的信息。
r.db('rethinkdb')
.table('stats')
.filter(
r.row('id').contains('table_server')
)('storage_engine')('disk')('space_usage')('data_bytes')
.reduce((left, right) => left.add(right))
此查询将检索所有节点中所有节点的所有表的大小。实质上,它只是从stat对象中读取每个单独表的用法并将其添加。
请注意,这会在分片设置中结合使用所有节点(我认为)。
r.db('rethinkdb')
.table('stats')
.filter(r.and(
r.row('id').contains('table_server'),
r.row('server').eq('servername')
)
)('storage_engine')('disk')('space_usage')('data_bytes')
.reduce((left, right) => left.add(right))
基本上与第一个只有and
r.db('rethinkdb')
.table('stats')
.filter(r.and(
r.row('id').contains('table_server'),
r.row('db').eq('dbname')
)
)('storage_engine')('disk')('space_usage')('data_bytes')
.reduce((left, right) => left.add(right))
与上面相同,只是使用db。
r.db('rethinkdb')
.table('stats')
.filter(r.and(
r.row('id').contains('table_server'),
r.row('db').eq('dbname'),
r.row('table').eq('tablename')
)
)('storage_engine')('disk')('space_usage')('data_bytes')
按表名过滤几乎相同。请记住,如果您要定位数据库中的特定表,则应确保还为数据库添加过滤器。否则,两个具有相同名称的表将返回两个大小值。另请注意,我们只期望一个结果,因此不需要减少。
最后请记住,他们只是ReQL查询。
另请注意,这使用JavaScript箭头(=>
)函数。在Python中,您只需将其替换为.reduce(lambda left, right: left+right)
。
如果您有任何改进,请发表评论:)