Last active
July 28, 2020 04:57
-
-
Save lithdew/5eafa8a073880a52972350dfe283fd5b to your computer and use it in GitHub Desktop.
zig rocksdb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const Builder = @import("std").build.Builder; | |
pub fn build(b: *Builder) void { | |
// Standard target options allows the person running `zig build` to choose | |
// what target to build for. Here we do not override the defaults, which | |
// means any target is allowed, and the default is native. Other options | |
// for restricting supported target set are available. | |
const target = b.standardTargetOptions(.{}); | |
// Standard release options allow the person running `zig build` to select | |
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. | |
const mode = b.standardReleaseOptions(); | |
const exe = b.addExecutable("rocksdb-zig", "src/main.zig"); | |
exe.setTarget(target); | |
exe.setBuildMode(mode); | |
exe.addLibPath("rocksdb"); | |
exe.addIncludeDir("rocksdb/include"); | |
exe.linkLibC(); | |
exe.linkSystemLibrary("rocksdb"); | |
exe.install(); | |
const run_cmd = exe.run(); | |
run_cmd.step.dependOn(b.getInstallStep()); | |
const run_step = b.step("run", "Run the app"); | |
run_step.dependOn(&run_cmd.step); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const std = @import("std"); | |
const c = @cImport(@cInclude("rocksdb/c.h")); | |
const assert = std.debug.assert; | |
const print = std.debug.print; | |
pub fn main() !void { | |
const opts = c.rocksdb_options_create(); | |
defer c.rocksdb_options_destroy(opts); | |
c.rocksdb_options_increase_parallelism(opts, 8); | |
c.rocksdb_options_optimize_level_style_compaction(opts, @boolToInt(false)); | |
c.rocksdb_options_set_create_if_missing(opts, @boolToInt(true)); | |
var err: ?[*:0]u8 = null; | |
const db = c.rocksdb_open(opts, "db", &err); | |
if (err) |message| @panic(std.mem.spanZ(message)); | |
defer c.rocksdb_close(db); | |
// Put value. | |
const write_opts = c.rocksdb_writeoptions_create(); | |
defer c.rocksdb_writeoptions_destroy(write_opts); | |
const key = "hello"; | |
const val = "world"; | |
c.rocksdb_put(db, write_opts, key, key.len, val, val.len, &err); | |
if (err) |message| @panic(std.mem.spanZ(message)); | |
print("Put '{}' = '{}' into the database.\n", .{ key, val }); | |
// Get value. | |
const read_opts = c.rocksdb_readoptions_create(); | |
defer c.rocksdb_readoptions_destroy(read_opts); | |
var read_len: usize = undefined; | |
var read_ptr = c.rocksdb_get(db, read_opts, key, key.len, &read_len, &err); | |
if (err) |message| @panic(std.mem.spanZ(message)); | |
defer std.c.free(read_ptr); | |
var read_val = read_ptr[0..read_len]; | |
print("Value of key '{}' from the database is: '{}'\n", .{ key, read_val }); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment