python - 如何在 Python 中删除 Riak 存储桶?

标签 python riak

我想删除一个 Riak 存储桶,以便从我的系统中清除旧数据。我知道没有单一的 Riak API 可以做到这一点,而是一个 deletes all the keys in the bucket , 这有效地删除了它。 Riak 确实提供了一个 API 来获取所有 key ,因此这非常简单。

我找到了一些 code online要做到这一点,但它是用 JavaScript 编写的,并在 Node.js 下运行。我想要 Python 的东西。这可能是一件简单的事情。有没有人有任何例子?

最佳答案

就像我在问题中所说的那样,我认为这很简单,尤其是对于 requests图书馆,所以我开发了一个脚本来做到这一点。我从 Riak keys=true(即非分 block )mode 开始,但是在我的大桶上失败了。我切换到分 block 模式 (keys=stream),但输出不再是单个 JSON 对象,而是一系列串联对象(即 {...}{...} ...{...}。一位同事为我提供了一个正则表达式,用于将 JSON 对象从聚合的 Riak 响应中分离出来,我按顺序对其进行解析和处理。还不错。这是代码:

#!/usr/bin/python
# script to delete all keys in a Riak bucket

import json
import re
import requests
import sys

def processChunk(chunk):
    global key_count
    obj = json.loads(chunk.group(2))
    if 'keys' in obj:
        for key in obj['keys']:
            r = requests.delete(sys.argv[1] + '/' + key)
            print 'delete key', key, 'response', r.status_code
            key_count += 1


if len(sys.argv) != 2:
    print 'Usage: {0} <http://riak_host:8098/riak/bucket_name>'.format(sys.argv[0])
    print 'Set riak_host and bucket_name appropriately for your Riak cluster.'
    exit(0)

r = requests.get(sys.argv[1] + '?keys=stream')
content = ''
key_count = 0

for chunk in r.iter_content():
    if chunk:
        content += chunk

re.sub(r'(?=(^|})({.*?})(?={|$))', processChunk, content)

print 'Deleted', key_count, 'keys'

虽然此时我的问题已基本解决,但我怀疑还有更好的解决方案。我欢迎人们在此页面上添加它们。除非几周后没有提供替代方案,否则我不会接受我自己的答案。

关于python - 如何在 Python 中删除 Riak 存储桶?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14531708/

相关文章:

Python:迭代一个集合,这样我们就不会多次比较相同的对象?

java - Mule ESB Riak 连接器 : How to configure HTTP over SSL endpoints

ubuntu - 在 Ubuntu 14.04 上安装 Riak KV

php - 使用 PHP 客户端使用 Riak 存储图像

python - 设置 Tkinter/ttk 框架背景颜色

python - lxml 解析 html 返回空结果,而 beautifulsoup 返回合理的解析

Python_Huobi API账户类型,这个参数是什么?

python - 操作列表项 python

python - 在 python-riak 客户端 l 中将 erlang 模块和 erlang 函数发送到 mapreduce 面的确切方法是什么

riak - 七周内提取Riak "Example Servers"七个数据库的第二章