leveldb kv数据库可视化操作小工具(增删查改)

 leveldb产生的文件无法直观查看,写了以下简单的工具使用命令行对leveldb进行直观的查看,包含简单的功能:增删查改,具体用法可看--help

#include "leveldb/db.h"

#include <iostream>
#include <unistd.h>
#include <getopt.h>
#include <string>

using namespace std;
using namespace leveldb;

enum EDB_OPT
{
  PUT = 0,
  GET,
  DEL,
  ITE
};

void printUsage()
{

  printf("【usage】:\n");

  printf("-n --dbname <dbname> 数据库名称\n");
  printf("-p --put 插入\n");
  printf("-g --get 查询\n");
  printf("-d --delete 删除\n");
  printf("-i --iterator 遍历所有kv\n");
  printf("-k --key <key>\n");
  printf("-v --value <value>\n");
  printf("-h --help \n");
}

void db_put(string dbName, string key, string value)
{
  leveldb::DB *db;
  leveldb::Options options;
  options.create_if_missing = true;
  leveldb::Status status = leveldb::DB::Open(options, dbName, &db);
  if (!status.ok())
  {
    cout << "打开数据失败:dbName:" << dbName << endl;
    return;
  }
  status = db->Put(WriteOptions(), key, value);

  if (!status.ok())
  {
    cout << "put操作失败" << endl;
  }
  else
  {
    cout << "put操作成功" << endl;
  }
  delete db;
}

void db_get(string dbName, string key)
{
  leveldb::DB *db;
  leveldb::Options options;
  options.create_if_missing = true;
  leveldb::Status status = leveldb::DB::Open(options, dbName, &db);
  if (!status.ok())
  {
    cout << "打开数据失败:dbName:" << dbName << endl;
    return;
  }
  string res;
  status = db->Get(ReadOptions(), dbName, &res);

  if (!status.ok())
  {
    cout << "get操作失败" << endl;
  }
  else
  {
    cout << "get操作成功,查询结果:" << res << endl;
  }
  delete db;
}

void db_del(string dbName, string key)
{
  leveldb::DB *db;
  leveldb::Options options;
  options.create_if_missing = true;
  leveldb::Status status = leveldb::DB::Open(options, dbName, &db);
  if (!status.ok())
  {
    cout << "打开数据失败:dbName:" << dbName << endl;
    return;
  }
  status = db->Delete(WriteOptions(), key);

  if (!status.ok())
  {
    cout << "del操作失败" << endl;
  }
  else
  {
    cout << "del操作成功" << endl;
  }
  delete db;
}

void db_iterator(string dbName)
{
  leveldb::DB *db;
  leveldb::Options options;
  leveldb::Status status = leveldb::DB::Open(options, dbName, &db);
  if (!status.ok())
  {
    cout << "打开数据失败:dbName:" << dbName << endl;
    return;
  }
  leveldb::Iterator *it = db->NewIterator(leveldb::ReadOptions());
  for (it->SeekToFirst(); it->Valid(); it->Next())
  {
    cout << "查找到kv对! " << it->key().ToString() << ":" << it->value().ToString() << endl;
  }
}

int main(int argc, char **argv)
{
  int opt;
  int digit_optind = 0;
  int option_index = 0;
  char *strings = "a::b:c:d";
  static struct option long_options[] = {
      {"dbname", required_argument, NULL, 'n'},
      {"put", no_argument, NULL, 'p'},
      {"get", no_argument, NULL, 'g'},
      {"delete", no_argument, NULL, 'd'},
      {"iterator", no_argument, NULL, 'i'},
      {"key", required_argument, NULL, 'k'},
      {"value", required_argument, NULL, 'v'},
      {"help", no_argument, NULL, 'h'},
      {NULL, 0, NULL, 0},
  };

  string dbName;
  EDB_OPT opcode;
  string key;
  string value;

  while ((opt = getopt_long_only(argc, argv, strings, long_options, &option_index)) != -1)
  {
    if (opt == 'n')
    {
      dbName = optarg;
    }
    if (opt == 'k')
    {
      key = optarg;
    }
    if (opt == 'v')
    {
      value = optarg;
    }
    if (opt == 'g')
    {
      opcode = GET;
    }
    if (opt == 'p')
    {
      opcode = PUT;
    }
    if (opt == 'd')
    {
      opcode = DEL;
    }
    if (opt == 'i')
    {
      opcode = ITE;
    }

    if (opt == 'h')
    {
      printUsage();
      exit(0);
    }
  }

  cout << "dbName:" << dbName << endl;
  cout << "opcode(0-PUT,1-GET,2-DEL,3-ITE):" << opcode << endl;
  cout << "key:" << key << endl;
  cout << "value:" << value << endl;

  if (opcode == PUT)
  {
    db_put(dbName, key, value);
  }
  else if (opcode == GET)
  {
    db_get(dbName, key);
  }
  else if (opcode == DEL)
  {
    db_del(dbName, key);
  }
  else if (opcode == ITE)
  {
    db_iterator(dbName);
  }
  else
  {
    printUsage();
  }

  return 0;
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LevelDB是一种高效的键值对存储库,被广泛用于各种应用程序中,例如用于存储文件系统元数据、缓存数据和分布式存储系统。而LevelDB本身并没有内置的可视化工具,但我们可以借助一些第三方工具实现对LevelDB可视化展示。 常见的LevelDB可视化工具包括LevelDB Inspector、LevelDB Explorer和LevelDB Viewer等。这些工具提供了图形化的用户界面,以便用户能够更直观地查看和管理LevelDB存储的数据。 通过这些可视化工具,我们可以轻松地浏览和搜索LevelDB中的各个键和对应的值。我们可以使用这些工具来查看数据库的整体结构、键值对的数量、数据的大小等信息。我们还可以通过这些工具执行一些操作,例如插入新的键值对、更新已存在的键值对、删除键值对等。 在可视化界面中,这些工具通常以层次结构的形式展示数据,每一层对应一个键前缀。我们可以展开每一层来查看其下的子层和键值对,并通过各种搜索方式快速定位到我们所需的数据。有些工具还可以以不同的形式展示数据,例如树形结构、表格、图形等,以便用户根据实际需求自由切换不同的展示方式。 总之,借助这些LevelDB可视化工具,我们可以更方便地管理和查询LevelDB中的数据。这对于开发人员和系统管理员来说是非常有用的,可以提高工作效率,简化操作流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值