Go to the documentation of this file.
16 #ifndef GRAPHSCOPE_PROPERTY_COLUMN_H_
17 #define GRAPHSCOPE_PROPERTY_COLUMN_H_
20 #include <string_view>
21 #include "grape/utils/concurrent_queue.h"
25 #include "grape/serialization/out_archive.h"
34 const std::string& work_dir) = 0;
40 virtual void close() = 0;
42 virtual void touch(
const std::string& filename) = 0;
44 virtual void dump(
const std::string& filename) = 0;
46 virtual size_t size()
const = 0;
48 virtual void copy_to_tmp(
const std::string& cur_path,
49 const std::string& tmp_path) = 0;
54 virtual void set_any(
size_t index,
const Any& value) = 0;
56 virtual Any get(
size_t index)
const = 0;
58 virtual void ingest(uint32_t index, grape::OutArchive& arc) = 0;
70 const std::string& work_dir)
override {
72 if (std::filesystem::exists(basic_path)) {
87 if (!name.empty() && std::filesystem::exists(name)) {
100 if (!name.empty() && std::filesystem::exists(name)) {
112 LOG(INFO) <<
"Open " << name <<
" with normal mmap pages";
117 void touch(
const std::string& filename)
override {
119 tmp.
open(filename,
true);
140 const std::string& tmp_path)
override {
142 if (!std::filesystem::exists(cur_path)) {
148 tmp.
open(tmp_path,
true);
154 void dump(
const std::string& filename)
override {
161 tmp.
open(filename,
true);
192 throw std::runtime_error(
"Index out of range");
209 void ingest(uint32_t index, grape::OutArchive& arc)
override {
233 TypedColumn(
const std::vector<PropertyType>& types) : types_(types) {
234 if (types.size() == 0) {
235 LOG(FATAL) <<
"RecordView column must have sub types.";
242 const std::string& work_dir)
override {
243 LOG(FATAL) <<
"RecordView column does not support open.";
249 LOG(FATAL) <<
"RecordView column does not support open with hugepages.";
252 void touch(
const std::string& filename)
override {
253 LOG(FATAL) <<
"RecordView column does not support touch.";
256 void dump(
const std::string& filename)
override {
257 LOG(FATAL) <<
"RecordView column does not support dump.";
261 const std::string& tmp_path)
override {
262 LOG(FATAL) <<
"RecordView column does not support copy_to_tmp.";
264 void close()
override;
266 size_t size()
const override;
271 void set_any(
size_t index,
const Any& value)
override;
277 Any get(
size_t index)
const override;
279 void ingest(uint32_t index, grape::OutArchive& arc)
override {
280 LOG(FATAL) <<
"RecordView column does not support ingest.";
284 LOG(ERROR) <<
"RecordView column does not have storage strategy.";
288 std::vector<PropertyType>
sub_types()
const {
return types_; }
313 const std::string& work_dir)
override {}
316 void touch(
const std::string& filename)
override {}
317 void dump(
const std::string& filename)
override {}
319 const std::string& tmp_path)
override {}
321 size_t size()
const override {
return 0; }
330 void ingest(uint32_t index, grape::OutArchive& arc)
override {}
346 const std::string& work_dir)
override {
348 if (std::filesystem::exists(basic_path +
".items")) {
356 if (work_dir ==
"") {
387 LOG(INFO) <<
"Open " << prefix <<
" with normal mmap pages";
392 void touch(
const std::string& filename)
override {
394 tmp.
open(filename,
true);
399 tmp.
set(k, offset, val);
400 offset += val.size();
405 offset += val.size();
424 const std::string& tmp_path)
override {
426 if (!std::filesystem::exists(cur_path +
".data")) {
429 copy_file(cur_path +
".data", tmp_path +
".data");
430 copy_file(cur_path +
".items", tmp_path +
".items");
436 tmp.
open(tmp_path,
true);
442 void dump(
const std::string& filename)
override {
451 tmp.
open(filename,
true);
457 tmp.
set(k, offset, val);
458 offset += val.size();
463 offset += val.size();
480 size_t basic_avg_width =
493 size_t pos = basic_pos_.load();
494 pos = pos + (pos + 4) / 5;
501 void set_value(
size_t idx,
const std::string_view& val) {
503 size_t offset = pos_.fetch_add(val.size());
506 size_t offset = basic_pos_.fetch_add(val.size());
509 LOG(FATAL) <<
"Index out of range";
520 size_t offset = pos_.fetch_add(value.size());
526 size_t offset = basic_pos_.fetch_add(value.size());
532 LOG(FATAL) <<
"Index out of range";
545 void ingest(uint32_t index, grape::OutArchive& arc)
override {
546 std::string_view val;
577 template <
typename INDEX_T>
580 template <
typename INDEX_T>
599 const std::string& tmp_path)
override {
600 meta_map_->copy_to_tmp(cur_path +
".map_meta", tmp_path +
".map_meta");
604 const std::string& work_dir)
override;
607 void dump(
const std::string& filename)
override;
609 void touch(
const std::string& filename)
override {
625 void set_value(
size_t idx,
const std::string_view& val);
631 std::string_view
get_view(
size_t idx)
const;
637 void ingest(uint32_t index, grape::OutArchive& arc)
override {
638 std::string_view val;
656 template <
typename INDEX_T>
659 const std::string& work_dir) {
661 meta_map_->open(name +
".map_meta",
snapshot_dir, work_dir);
662 meta_map_->reserve(std::numeric_limits<INDEX_T>::max());
665 template <
typename INDEX_T>
667 index_col_.open_in_memory(name);
668 meta_map_->open_in_memory(name +
".map_meta");
669 meta_map_->reserve(std::numeric_limits<INDEX_T>::max());
672 template <
typename INDEX_T>
675 index_col_.open_with_hugepages(name, force);
676 meta_map_->open_with_hugepages(name +
".map_meta",
true);
677 meta_map_->reserve(std::numeric_limits<INDEX_T>::max());
680 template <
typename INDEX_T>
682 index_col_.dump(filename);
683 meta_map_->dump(filename +
".map_meta",
"");
686 template <
typename INDEX_T>
688 INDEX_T ind = index_col_.get_view(idx);
689 return meta_map_->get_key(ind).AsStringView();
692 template <
typename INDEX_T>
694 const std::string_view& val) {
696 if (!meta_map_->get_index(val, lid)) {
698 if (!meta_map_->get_index(val, lid)) {
699 lid = meta_map_->insert(val);
703 index_col_.set_value(idx, lid);
710 const std::vector<PropertyType>& sub_types = {});
713 template <
typename EDATA_T>
714 class ConcatColumn :
public ColumnBase {
718 ConcatColumn(
const TypedColumn<EDATA_T>& basic_column,
719 const TypedColumn<EDATA_T>& extra_column)
720 : basic_column_(basic_column),
721 extra_column_(extra_column),
722 basic_size_(basic_column.size()) {}
724 void open(
const std::string& name,
const std::string&
snapshot_dir,
725 const std::string& work_dir) {
726 LOG(FATAL) <<
"not implemented";
729 void open_in_memory(
const std::string& name) {
730 LOG(FATAL) <<
"not implemented";
733 void open_with_hugepages(
const std::string& name,
bool force) {
734 LOG(FATAL) <<
"not implemented";
737 void close() { LOG(FATAL) <<
"not implemented"; }
739 EDATA_T get_view(
size_t index)
const {
740 return index < basic_size_ ? basic_column_.get(index)
741 : extra_column_.get(index - basic_size_);
744 void touch(
const std::string& filename) { LOG(FATAL) <<
"not implemented"; }
746 virtual void dump(
const std::string& filename) {
747 LOG(FATAL) <<
"not implemented";
750 size_t size()
const {
return basic_size_ + extra_column_.size(); }
752 void copy_to_tmp(
const std::string& cur_path,
const std::string& tmp_path) {
753 LOG(FATAL) <<
"not implemented";
755 void resize(
size_t size) { LOG(FATAL) <<
"not implemented"; }
757 PropertyType type()
const {
return AnyConverter<EDATA_T>::type(); }
759 void set_any(
size_t index,
const Any& value) {
760 LOG(FATAL) <<
"not implemented";
763 Any get(
size_t index)
const {
764 if (index < basic_size_) {
765 return basic_column_.get(index);
767 return extra_column_.get(index - basic_size_);
771 void ingest(uint32_t index, grape::OutArchive& arc) {
772 LOG(FATAL) <<
"not implemented";
776 return basic_column_.storage_strategy();
780 const TypedColumn<EDATA_T>& basic_column_;
781 const TypedColumn<EDATA_T>& extra_column_;
790 virtual Any get(
size_t index)
const = 0;
794 template <
typename T>
843 LOG(ERROR) <<
"LabelKeyColumn does not support get() to Any";
864 LOG(ERROR) <<
"GlobalId Column does not support get() to Any";
876 std::shared_ptr<ColumnBase> column);
880 #endif // GRAPHSCOPE_PROPERTY_COLUMN_H_
const mmap_array< std::string_view > & extra_buffer() const
Definition: column.h:559
size_t extra_buffer_size() const
Definition: column.h:563
void touch(const std::string &filename) override
Definition: column.h:117
void resize(size_t size) override
Definition: column.h:173
T get_view(size_t index) const
Definition: column.h:813
size_t size() const
Definition: column.h:818
size_t basic_buffer_size() const
Definition: column.h:557
Any get(size_t index) const override
Definition: column.h:842
void open(const std::string &name, const std::string &snapshot_dir, const std::string &work_dir) override
Definition: column.h:69
void resize(size_t size, size_t data_size)
Definition: mmap_array.h:483
size_t size() const
Definition: mmap_array.h:498
const LFIndexer< INDEX_T > & get_meta_map() const
Definition: column.h:648
void dump(const std::string &filename) override
Definition: column.h:681
PropertyType type() const override
Definition: column.h:499
std::string_view get_view(size_t idx) const
Definition: column.h:687
virtual void open(const std::string &name, const std::string &snapshot_dir, const std::string &work_dir)=0
std::vector< PropertyType > types_
Definition: column.h:291
void resize(size_t size) override
Definition: column.h:472
TypedColumn(StorageStrategy strategy)
Definition: column.h:66
void dump(const std::string &filename) override
Definition: column.h:442
void set_value(size_t index, const T &val)
Definition: column.h:186
void touch(const std::string &filename) override
Definition: column.h:252
virtual PropertyType type() const =0
PropertyType type() const override
Definition: column.h:269
void open(const std::string &filename, bool sync_to_file)
Definition: mmap_array.h:463
grape::SpinLock lock_
Definition: column.h:653
const mmap_array< std::string_view > & basic_buffer() const
Definition: column.h:551
std::shared_ptr< Table > table_
Definition: column.h:292
uint16_t width_
Definition: column.h:573
~TypedRefColumn()
Definition: column.h:857
LabelKey label_key_
Definition: column.h:848
void open_with_hugepages(const std::string &name, bool force) override
Definition: column.h:315
mmap_array< T > basic_buffer_
Definition: column.h:223
void set_any(size_t index, const Any &value) override
Definition: column.h:326
Create RefColumn for ease of usage for hqps.
Definition: column.h:787
StorageStrategy storage_strategy() const override
Definition: column.h:283
void close() override
Definition: column.h:134
const TypedColumn< INDEX_T > & get_index_col() const
Definition: column.h:647
size_t size() const override
Definition: column.h:171
void ingest(uint32_t index, grape::OutArchive &arc) override
Definition: column.h:637
const mmap_array< T > & extra_buffer
Definition: column.h:827
size_t size() const override
Definition: column.h:470
void set_any(size_t idx, const Any &value) override
Definition: column.h:627
StringMapColumn(StorageStrategy strategy)
Definition: column.h:583
void open(const std::string &name, const std::string &snapshot_dir, const std::string &work_dir) override
Definition: column.h:241
StorageStrategy storage_strategy() const override
Definition: column.h:332
void close() override
Definition: column.h:613
static PropertyType Varchar(uint16_t max_length)
Definition: types.cc:323
~TypedColumn()
Definition: column.h:343
void open_with_hugepages(const std::string &name, bool force) override
Definition: column.h:98
void resize(size_t size)
Definition: mmap_array.h:319
void open_with_hugepages(const std::string &name, bool force) override
Definition: column.h:673
PropertyType type() const override
Definition: column.h:184
size_t size() const override
Definition: column.h:620
uint8_t label_data_type
Definition: types.h:277
void open_in_memory(const std::string &prefix) override
Definition: column.h:366
Definition: adj_list.h:23
~StringMapColumn()
Definition: column.h:590
void dump(const std::string &filename) override
Definition: column.h:256
Any get(size_t index) const override
Definition: column.h:328
static const PropertyType kEmpty
Definition: types.h:133
StorageStrategy
Definition: types.h:58
TypedColumn< INDEX_T > index_col_
Definition: column.h:651
void close() override
Definition: column.h:418
Any get(size_t index) const override
Definition: column.h:820
std::shared_ptr< RefColumnBase > CreateRefColumn(std::shared_ptr< ColumnBase > column)
Definition: column.cc:187
void ingest(uint32_t index, grape::OutArchive &arc) override
Definition: column.h:209
Any get(size_t index) const override
Definition: column.h:205
void reset()
Definition: mmap_array.h:453
LabelKey get_view(size_t index) const
Definition: column.h:840
StorageStrategy storage_strategy() const override
Definition: column.h:215
mmap_array< std::string_view > extra_buffer_
Definition: column.h:568
void open(const std::string &filename, bool sync_to_file=false)
Definition: mmap_array.h:129
void resize(size_t size) override
Definition: column.h:621
size_t basic_size
Definition: column.h:826
const mmap_array< T > & extra_buffer() const
Definition: column.h:219
void open_in_memory(const std::string &name) override
Definition: column.h:666
StorageStrategy strategy_
Definition: column.h:335
size_t extra_size
Definition: column.h:828
virtual StorageStrategy storage_strategy() const =0
TypedColumn(StorageStrategy strategy)
Definition: column.h:309
static constexpr const uint16_t STRING_DEFAULT_MAX_LENGTH
Definition: types.h:96
Any get(size_t index) const override
Definition: column.h:863
StorageStrategy strategy_
Definition: column.h:572
T get_view(size_t index) const
Definition: column.h:200
TypedRefColumn(const TypedColumn< T > &column)
Definition: column.h:805
std::shared_ptr< ColumnBase > CreateColumn(PropertyType type, StorageStrategy strategy, const std::vector< PropertyType > &sub_types)
Definition: column.cc:114
std::atomic< size_t > pos_
Definition: column.h:570
void ingest(uint32_t index, grape::OutArchive &arc) override
Definition: column.h:330
void set_value(size_t idx, const std::string_view &val)
Definition: column.h:501
size_t basic_buffer_size() const
Definition: column.h:218
TypedRefColumn(const mmap_array< T > &buffer, StorageStrategy strategy)
Definition: column.h:799
StorageStrategy storage_strategy() const override
Definition: column.h:555
TypedColumn(StorageStrategy strategy, uint16_t width=PropertyType::STRING_DEFAULT_MAX_LENGTH)
Definition: column.h:340
std::atomic< size_t > basic_pos_
Definition: column.h:571
~TypedColumn()
Definition: column.h:239
size_t basic_size_
Definition: column.h:567
~TypedRefColumn()
Definition: column.h:838
void open_in_memory(const std::string &name) override
Definition: column.h:86
void open_with_hugepages(const std::string &prefix, bool force) override
Definition: column.h:376
size_t size() const
Definition: mmap_array.h:415
TypedColumn(const std::vector< PropertyType > &types)
Definition: column.h:233
virtual void copy_to_tmp(const std::string &cur_path, const std::string &tmp_path)=0
void open(const std::string &name, const std::string &snapshot_dir, const std::string &work_dir) override
Definition: column.h:657
static const PropertyType kRecordView
Definition: types.h:149
virtual void set_any(size_t index, const Any &value)=0
void touch(const std::string &filename) override
Definition: column.h:609
Definition: mmap_array.h:447
StorageStrategy strategy_
Definition: column.h:227
size_t extra_size_
Definition: column.h:569
virtual ~RefColumnBase()
Definition: column.h:789
void ingest(uint32_t index, grape::OutArchive &arc) override
Definition: column.h:279
void touch(const std::string &filename) override
Definition: column.h:392
~TypedColumn()
Definition: column.h:67
size_t size() const override
Definition: column.h:321
TypedRefColumn(label_t label_key)
Definition: column.h:855
virtual void dump(const std::string &filename)=0
void dump(const std::string &filename) override
Definition: column.h:154
mmap_array< T > extra_buffer_
Definition: column.h:225
~TypedColumn()
Definition: column.h:310
T value_type
Definition: column.h:797
void open(const std::string &name, const std::string &snapshot_dir, const std::string &work_dir) override
Definition: column.h:312
virtual Any get(size_t index) const =0
virtual ~ColumnBase()
Definition: column.h:31
virtual size_t size() const =0
PropertyType type() const override
Definition: column.h:623
virtual void open_in_memory(const std::string &name)=0
void ingest(uint32_t index, grape::OutArchive &arc) override
Definition: column.h:545
void copy_file(const std::string &src, const std::string &dst)
Definition: file_names.h:80
GlobalId get_view(size_t index) const
Definition: column.h:859
size_t extra_size_
Definition: column.h:226
void set_any(size_t index, const Any &value) override
Definition: column.h:196
void touch(const std::string &filename) override
Definition: column.h:316
Definition: mmap_array.h:65
Any get(size_t idx) const override
Definition: column.h:633
StorageStrategy storage_strategy() const override
Definition: column.h:643
std::string snapshot_dir(const std::string &work_dir, uint32_t version)
Definition: file_names.h:192
Definition: loading_config.h:232
StorageStrategy strategy_
Definition: column.h:830
virtual void open_with_hugepages(const std::string &name, bool force)=0
void copy_to_tmp(const std::string &cur_path, const std::string &tmp_path) override
Definition: column.h:260
void open(const std::string &name, const std::string &snapshot_dir, const std::string &work_dir) override
Definition: column.h:345
void close() override
Definition: column.h:320
std::string_view get_view(size_t idx) const
Definition: column.h:536
void copy_to_tmp(const std::string &cur_path, const std::string &tmp_path) override
Definition: column.h:598
virtual Any get(size_t index) const =0
std::vector< PropertyType > sub_types() const
Definition: column.h:288
const mmap_array< T > & basic_buffer
Definition: column.h:825
virtual void ingest(uint32_t index, grape::OutArchive &arc)=0
void dump(const std::string &filename) override
Definition: column.h:317
Any get(size_t idx) const override
Definition: column.h:541
void set(size_t idx, size_t offset, const std::string_view &val)
Definition: mmap_array.h:488
size_t extra_buffer_size() const
Definition: column.h:220
~TypedRefColumn()
Definition: column.h:811
label_t label_key_
Definition: column.h:869
void resize(size_t size) override
Definition: column.h:322
void open_in_memory(const std::string &name) override
Definition: column.h:314
void copy_to_tmp(const std::string &cur_path, const std::string &tmp_path) override
Definition: column.h:423
LFIndexer< INDEX_T > * meta_map_
Definition: column.h:652
TypedRefColumn(LabelKey label_key)
Definition: column.h:836
void set_value(size_t idx, const std::string_view &val)
Definition: column.h:693
PropertyType type() const override
Definition: column.h:324
virtual void resize(size_t size)=0
void reset()
Definition: mmap_array.h:84
void set(size_t idx, const T &val)
Definition: mmap_array.h:408
virtual void touch(const std::string &filename)=0
void copy_to_tmp(const std::string &cur_path, const std::string &tmp_path) override
Definition: column.h:139
const mmap_array< T > & basic_buffer() const
Definition: column.h:217
Definition: id_indexer.h:184
static const PropertyType kStringMap
Definition: types.h:146
void set_any(size_t idx, const Any &value) override
Definition: column.h:513
typename LabelKey::label_data_type label_t
Definition: column.h:854
std::string_view AsStringView() const
Definition: types.h:641
size_t basic_size_
Definition: column.h:224
mmap_array< std::string_view > basic_buffer_
Definition: column.h:566
void set_value_with_check(size_t idx, const std::string_view &value)
Definition: column.h:518
void open_with_hugepages(const std::string &name, bool force) override
Definition: column.h:248
void copy_to_tmp(const std::string &cur_path, const std::string &tmp_path) override
Definition: column.h:318