Flex  0.17.9
mutable_property_fragment.h
Go to the documentation of this file.
1 
16 #ifndef GRAPHSCOPE_FRAGMENT_MUTABLE_PROPERTY_FRAGMENT_H_
17 #define GRAPHSCOPE_FRAGMENT_MUTABLE_PROPERTY_FRAGMENT_H_
18 
19 #include <thread>
20 #include <tuple>
21 #include <vector>
22 
24 
28 #include "flex/utils/arrow_utils.h"
29 #include "flex/utils/indexers.h"
31 #include "flex/utils/yaml_utils.h"
32 #include "grape/io/local_io_adaptor.h"
33 #include "grape/serialization/out_archive.h"
34 
35 namespace gs {
36 
38  public:
40 
42 
43  void IngestEdge(label_t src_label, vid_t src_lid, label_t dst_label,
44  vid_t dst_lid, label_t edge_label, timestamp_t ts,
45  grape::OutArchive& arc, Allocator& alloc);
46 
47  void UpdateEdge(label_t src_label, vid_t src_lid, label_t dst_label,
48  vid_t dst_lid, label_t edge_label, timestamp_t ts,
49  const Any& arc, Allocator& alloc);
50 
51  void Open(const std::string& work_dir, int memory_level);
52 
53  void Compact(uint32_t version);
54 
55  void Warmup(int thread_num);
56 
57  void Dump(const std::string& work_dir, uint32_t version);
58 
59  void DumpSchema(const std::string& filename);
60 
61  const Schema& schema() const;
62 
64 
65  void Clear();
66 
67  inline Table& get_vertex_table(label_t vertex_label) {
68  return vertex_data_[vertex_label];
69  }
70 
71  inline const Table& get_vertex_table(label_t vertex_label) const {
72  return vertex_data_[vertex_label];
73  }
74 
75  vid_t vertex_num(label_t vertex_label) const;
76 
77  size_t edge_num(label_t src_label, label_t edge_label,
78  label_t dst_label) const;
79 
80  bool get_lid(label_t label, const Any& oid, vid_t& lid) const;
81 
82  Any get_oid(label_t label, vid_t lid) const;
83 
84  vid_t add_vertex(label_t label, const Any& id);
85  std::shared_ptr<CsrConstEdgeIterBase> get_outgoing_edges(
86  label_t label, vid_t u, label_t neighbor_label, label_t edge_label) const;
87 
88  std::shared_ptr<CsrConstEdgeIterBase> get_incoming_edges(
89  label_t label, vid_t u, label_t neighbor_label, label_t edge_label) const;
90 
91  std::shared_ptr<CsrEdgeIterBase> get_outgoing_edges_mut(
92  label_t label, vid_t u, label_t neighbor_label, label_t edge_label);
93 
94  std::shared_ptr<CsrEdgeIterBase> get_incoming_edges_mut(
95  label_t label, vid_t u, label_t neighbor_label, label_t edge_label);
96 
98  label_t neighbor_label,
99  label_t edge_label) const;
100 
102  label_t neighbor_label,
103  label_t edge_label) const;
104 
105  inline CsrBase* get_oe_csr(label_t label, label_t neighbor_label,
106  label_t edge_label) {
107  size_t index = label * vertex_label_num_ * edge_label_num_ +
108  neighbor_label * edge_label_num_ + edge_label;
109  return oe_[index];
110  }
111 
112  inline const CsrBase* get_oe_csr(label_t label, label_t neighbor_label,
113  label_t edge_label) const {
114  size_t index = label * vertex_label_num_ * edge_label_num_ +
115  neighbor_label * edge_label_num_ + edge_label;
116  return oe_[index];
117  }
118 
119  inline CsrBase* get_ie_csr(label_t label, label_t neighbor_label,
120  label_t edge_label) {
121  size_t index = neighbor_label * vertex_label_num_ * edge_label_num_ +
122  label * edge_label_num_ + edge_label;
123  return ie_[index];
124  }
125 
126  inline const CsrBase* get_ie_csr(label_t label, label_t neighbor_label,
127  label_t edge_label) const {
128  size_t index = neighbor_label * vertex_label_num_ * edge_label_num_ +
129  label * edge_label_num_ + edge_label;
130  return ie_[index];
131  }
132 
133  void loadSchema(const std::string& filename);
134  inline std::shared_ptr<ColumnBase> get_vertex_property_column(
135  uint8_t label, const std::string& prop) const {
136  return vertex_data_[label].get_column(prop);
137  }
138 
139  inline std::shared_ptr<RefColumnBase> get_vertex_id_column(
140  uint8_t label) const {
141  if (lf_indexers_[label].get_type() == PropertyType::kInt64) {
142  return std::make_shared<TypedRefColumn<int64_t>>(
143  dynamic_cast<const TypedColumn<int64_t>&>(
144  lf_indexers_[label].get_keys()));
145  } else if (lf_indexers_[label].get_type() == PropertyType::kInt32) {
146  return std::make_shared<TypedRefColumn<int32_t>>(
147  dynamic_cast<const TypedColumn<int32_t>&>(
148  lf_indexers_[label].get_keys()));
149  } else if (lf_indexers_[label].get_type() == PropertyType::kUInt64) {
150  return std::make_shared<TypedRefColumn<uint64_t>>(
151  dynamic_cast<const TypedColumn<uint64_t>&>(
152  lf_indexers_[label].get_keys()));
153  } else if (lf_indexers_[label].get_type() == PropertyType::kUInt32) {
154  return std::make_shared<TypedRefColumn<uint32_t>>(
155  dynamic_cast<const TypedColumn<uint32_t>&>(
156  lf_indexers_[label].get_keys()));
157  } else if (lf_indexers_[label].get_type() == PropertyType::kStringView) {
158  return std::make_shared<TypedRefColumn<std::string_view>>(
159  dynamic_cast<const TypedColumn<std::string_view>&>(
160  lf_indexers_[label].get_keys()));
161  } else {
162  LOG(ERROR) << "Unsupported vertex id type: "
163  << lf_indexers_[label].get_type();
164  return nullptr;
165  }
166  }
167 
168  void generateStatistics(const std::string& work_dir) const;
169 
171  std::vector<IndexerType> lf_indexers_;
172  std::vector<CsrBase*> ie_, oe_;
173  std::vector<DualCsrBase*> dual_csr_list_;
174  std::vector<Table> vertex_data_;
175 
177 };
178 
179 } // namespace gs
180 
181 #endif // GRAPHSCOPE_FRAGMENT_MUTABLE_PROPERTY_FRAGMENT_H_
Definition: allocators.h:29
Definition: csr_base.h:61
Definition: csr_base.h:27
Definition: mutable_property_fragment.h:37
std::shared_ptr< CsrConstEdgeIterBase > get_incoming_edges(label_t label, vid_t u, label_t neighbor_label, label_t edge_label) const
Definition: mutable_property_fragment.cc:431
void Dump(const std::string &work_dir, uint32_t version)
Definition: mutable_property_fragment.cc:301
void generateStatistics(const std::string &work_dir) const
Definition: mutable_property_fragment.cc:461
Table & get_vertex_table(label_t vertex_label)
Definition: mutable_property_fragment.h:67
CsrConstEdgeIterBase * get_outgoing_edges_raw(label_t label, vid_t u, label_t neighbor_label, label_t edge_label) const
Definition: mutable_property_fragment.cc:437
CsrBase * get_oe_csr(label_t label, label_t neighbor_label, label_t edge_label)
Definition: mutable_property_fragment.h:105
void Clear()
Definition: mutable_property_fragment.cc:54
std::shared_ptr< ColumnBase > get_vertex_property_column(uint8_t label, const std::string &prop) const
Definition: mutable_property_fragment.h:134
std::vector< IndexerType > lf_indexers_
Definition: mutable_property_fragment.h:171
std::shared_ptr< CsrConstEdgeIterBase > get_outgoing_edges(label_t label, vid_t u, label_t neighbor_label, label_t edge_label) const
Definition: mutable_property_fragment.cc:424
std::vector< CsrBase * > ie_
Definition: mutable_property_fragment.h:172
bool get_lid(label_t label, const Any &oid, vid_t &lid) const
Definition: mutable_property_fragment.cc:410
MutablePropertyFragment()
Definition: mutable_property_fragment.cc:24
void UpdateEdge(label_t src_label, vid_t src_lid, label_t dst_label, vid_t dst_lid, label_t edge_label, timestamp_t ts, const Any &arc, Allocator &alloc)
Definition: mutable_property_fragment.cc:383
std::shared_ptr< CsrEdgeIterBase > get_incoming_edges_mut(label_t label, vid_t u, label_t neighbor_label, label_t edge_label)
Definition: mutable_property_fragment.cc:455
std::vector< Table > vertex_data_
Definition: mutable_property_fragment.h:174
~MutablePropertyFragment()
Definition: mutable_property_fragment.cc:26
CsrBase * get_ie_csr(label_t label, label_t neighbor_label, label_t edge_label)
Definition: mutable_property_fragment.h:119
vid_t vertex_num(label_t vertex_label) const
Definition: mutable_property_fragment.cc:395
Any get_oid(label_t label, vid_t lid) const
Definition: mutable_property_fragment.cc:415
const CsrBase * get_oe_csr(label_t label, label_t neighbor_label, label_t edge_label) const
Definition: mutable_property_fragment.h:112
std::shared_ptr< CsrEdgeIterBase > get_outgoing_edges_mut(label_t label, vid_t u, label_t neighbor_label, label_t edge_label)
Definition: mutable_property_fragment.cc:448
void Warmup(int thread_num)
Definition: mutable_property_fragment.cc:360
void Compact(uint32_t version)
Definition: mutable_property_fragment.cc:273
void loadSchema(const std::string &filename)
Definition: mutable_property_fragment.cc:47
const Table & get_vertex_table(label_t vertex_label) const
Definition: mutable_property_fragment.h:71
CsrConstEdgeIterBase * get_incoming_edges_raw(label_t label, vid_t u, label_t neighbor_label, label_t edge_label) const
Definition: mutable_property_fragment.cc:442
size_t edge_num(label_t src_label, label_t edge_label, label_t dst_label) const
Definition: mutable_property_fragment.cc:399
void DumpSchema(const std::string &filename)
Definition: mutable_property_fragment.cc:70
Schema & mutable_schema()
Definition: mutable_property_fragment.cc:393
const CsrBase * get_ie_csr(label_t label, label_t neighbor_label, label_t edge_label) const
Definition: mutable_property_fragment.h:126
const Schema & schema() const
Definition: mutable_property_fragment.cc:391
Schema schema_
Definition: mutable_property_fragment.h:170
void Open(const std::string &work_dir, int memory_level)
Definition: mutable_property_fragment.cc:119
vid_t add_vertex(label_t label, const Any &id)
Definition: mutable_property_fragment.cc:419
std::shared_ptr< RefColumnBase > get_vertex_id_column(uint8_t label) const
Definition: mutable_property_fragment.h:139
std::vector< CsrBase * > oe_
Definition: mutable_property_fragment.h:172
size_t vertex_label_num_
Definition: mutable_property_fragment.h:176
std::vector< DualCsrBase * > dual_csr_list_
Definition: mutable_property_fragment.h:173
void IngestEdge(label_t src_label, vid_t src_lid, label_t dst_label, vid_t dst_lid, label_t edge_label, timestamp_t ts, grape::OutArchive &arc, Allocator &alloc)
Definition: mutable_property_fragment.cc:373
size_t edge_label_num_
Definition: mutable_property_fragment.h:176
Definition: schema.h:29
Definition: table.h:30
Definition: column.h:347
Definition: column.h:67
Definition: adj_list.h:23
uint32_t timestamp_t
Definition: types.h:30
uint32_t vid_t
Definition: types.h:31
uint8_t label_t
Definition: types.h:32
Definition: types.h:399
static const PropertyType kUInt64
Definition: types.h:145
static const PropertyType kInt64
Definition: types.h:144
static const PropertyType kStringView
Definition: types.h:149
static const PropertyType kInt32
Definition: types.h:141
static const PropertyType kUInt32
Definition: types.h:142