2018-01-19 02:59:22 +01:00
|
|
|
// Matrix Construct
|
|
|
|
//
|
|
|
|
// Copyright (C) Matrix Construct Developers, Authors & Contributors
|
|
|
|
// Copyright (C) 2016-2018 Jason Volk <jason@zemos.net>
|
|
|
|
//
|
|
|
|
// Permission to use, copy, modify, and/or distribute this software for any
|
|
|
|
// purpose with or without fee is hereby granted, provided that the above
|
|
|
|
// copyright notice and this permission notice is present in all copies. The
|
|
|
|
// full license for this software is available in the LICENSE file.
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
#define HAVE_IRCD_DB_DATABASE_DESCRIPTOR_H
|
|
|
|
|
2018-09-20 00:38:37 +02:00
|
|
|
namespace ircd::db
|
|
|
|
{
|
|
|
|
struct descriptor;
|
|
|
|
using description = std::vector<descriptor>;
|
|
|
|
}
|
|
|
|
|
2018-01-19 02:59:22 +01:00
|
|
|
/// Descriptor of a column when opening database. Database must be opened with
|
|
|
|
/// a consistent set of descriptors describing what will be found upon opening.
|
2018-09-20 00:38:37 +02:00
|
|
|
struct ircd::db::descriptor
|
2018-01-19 02:59:22 +01:00
|
|
|
{
|
|
|
|
using typing = std::pair<std::type_index, std::type_index>;
|
|
|
|
|
2018-04-18 00:28:08 +02:00
|
|
|
/// User given name for this column. Must be consistent.
|
2018-01-19 02:59:22 +01:00
|
|
|
std::string name;
|
2018-04-18 00:28:08 +02:00
|
|
|
|
|
|
|
/// User given description of this column; not used by RocksDB
|
2018-01-19 02:59:22 +01:00
|
|
|
std::string explain;
|
2018-04-18 00:28:08 +02:00
|
|
|
|
|
|
|
/// Indicate key and value type.
|
2018-01-19 02:59:22 +01:00
|
|
|
typing type { typeid(string_view), typeid(string_view) };
|
2018-04-18 00:28:08 +02:00
|
|
|
|
|
|
|
/// RocksDB ColumnFamilyOptions string; can be used for items not
|
|
|
|
/// otherwise specified here.
|
2018-01-19 02:59:22 +01:00
|
|
|
std::string options {};
|
2018-04-18 00:28:08 +02:00
|
|
|
|
|
|
|
/// User given comparator. We can automatically set this value for
|
|
|
|
/// some types given for the type.first typeid; otherwise it must be
|
|
|
|
/// set for exotic/unsupported keys.
|
2018-01-19 02:59:22 +01:00
|
|
|
db::comparator cmp {};
|
2018-04-18 00:28:08 +02:00
|
|
|
|
|
|
|
/// User given prefix extractor.
|
2018-01-19 02:59:22 +01:00
|
|
|
db::prefix_transform prefix {};
|
2018-04-18 00:28:08 +02:00
|
|
|
|
|
|
|
/// Size of the LRU cache for uncompressed blocks
|
2018-09-03 02:31:09 +02:00
|
|
|
ssize_t cache_size { -1 };
|
2018-04-18 00:28:08 +02:00
|
|
|
|
|
|
|
/// Size of the LRU cache for compressed blocks
|
2018-09-03 02:31:09 +02:00
|
|
|
ssize_t cache_size_comp { -1 };
|
2018-04-18 00:28:08 +02:00
|
|
|
|
|
|
|
/// Bloom filter bits. Filter is still useful even if queries are expected
|
|
|
|
/// to always hit on this column; see `expect_queries_hit` option.
|
2018-04-15 08:00:56 +02:00
|
|
|
size_t bloom_bits { 10 };
|
2018-04-18 00:28:08 +02:00
|
|
|
|
|
|
|
/// Set this option to true if queries to this column are expected to
|
|
|
|
/// find keys that exist. This is useful for columns with keys that
|
|
|
|
/// were first found from values in another column, where if the first
|
|
|
|
/// column missed there'd be no reason to query this column.
|
|
|
|
bool expect_queries_hit { false };
|
2018-09-18 06:26:55 +02:00
|
|
|
|
|
|
|
/// Data block size for uncompressed data. Compression will make the
|
|
|
|
/// block smaller when it IO's to and from disk. Smaller blocks may be
|
|
|
|
/// more space and query overhead if values exceed this size. Larger
|
|
|
|
/// blocks will read and cache unrelated data if values are smaller
|
|
|
|
/// than this size.
|
|
|
|
size_t block_size { 512 };
|
2018-09-19 00:07:09 +02:00
|
|
|
|
|
|
|
/// User given compaction callback surface.
|
|
|
|
db::compactor compactor {};
|
2018-01-19 02:59:22 +01:00
|
|
|
};
|