Flex  0.17.9
update_transaction.h
Go to the documentation of this file.
1 
16 #ifndef GRAPHSCOPE_DATABASE_UPDATE_TRANSACTION_H_
17 #define GRAPHSCOPE_DATABASE_UPDATE_TRANSACTION_H_
18 
19 #include <limits>
20 #include <utility>
21 
22 #include "flat_hash_map/flat_hash_map.hpp"
26 #include "flex/utils/allocators.h"
27 #include "flex/utils/id_indexer.h"
30 #include "grape/serialization/in_archive.h"
31 
32 namespace gs {
33 
34 class MutablePropertyFragment;
35 class WalWriter;
36 class VersionManager;
37 
39  public:
41  const std::string& work_dir, WalWriter& logger,
43 
45 
46  timestamp_t timestamp() const;
47 
48  void Commit();
49 
50  void Abort();
51 
52  bool AddVertex(label_t label, const Any& oid, const std::vector<Any>& props);
53 
54  bool AddEdge(label_t src_label, const Any& src, label_t dst_label,
55  const Any& dst, label_t edge_label, const Any& value);
56 
58  public:
59  vertex_iterator(label_t label, vid_t cur, vid_t& num,
60  UpdateTransaction* txn);
62  bool IsValid() const;
63  void Next();
64  void Goto(vid_t target);
65 
66  Any GetId() const;
67 
68  vid_t GetIndex() const;
69 
70  Any GetField(int col_id) const;
71 
72  bool SetField(int col_id, const Any& value);
73 
74  private:
77 
80  };
81 
82  class edge_iterator {
83  public:
84  edge_iterator(bool dir, label_t label, vid_t v, label_t neighbor_label,
85  label_t edge_label, const vid_t* aeb, const vid_t* aee,
86  std::shared_ptr<CsrConstEdgeIterBase> init_iter,
87  UpdateTransaction* txn);
89 
90  Any GetData() const;
91 
92  void SetData(const Any& value);
93 
94  bool IsValid() const;
95 
96  void Next();
97 
98  void Forward(size_t offset);
99 
100  vid_t GetNeighbor() const;
101 
102  label_t GetNeighborLabel() const;
103 
104  label_t GetEdgeLabel() const;
105 
106  private:
107  bool dir_;
108 
111 
114 
117 
118  std::shared_ptr<CsrConstEdgeIterBase> init_iter_;
120  size_t offset_;
121  };
122 
124 
126  label_t neighbor_label, label_t edge_label);
127 
129  label_t neighbor_label, label_t edge_label);
130 
131  Any GetVertexField(label_t label, vid_t lid, int col_id) const;
132 
133  bool SetVertexField(label_t label, vid_t lid, int col_id, const Any& value);
134 
135  void SetEdgeData(bool dir, label_t label, vid_t v, label_t neighbor_label,
136  vid_t nbr, label_t edge_label, const Any& value);
137 
138  bool GetUpdatedEdgeData(bool dir, label_t label, vid_t v,
139  label_t neighbor_label, vid_t nbr, label_t edge_label,
140  Any& ret) const;
141 
142  static void IngestWal(MutablePropertyFragment& graph,
143  const std::string& work_dir, uint32_t timestamp,
144  char* data, size_t length, Allocator& alloc);
145 
146  private:
147  friend class GraphDBSession;
148  void batch_commit(UpdateBatch& batch);
149 
150  void set_edge_data_with_offset(bool dir, label_t label, vid_t v,
151  label_t neighbor_label, vid_t nbr,
152  label_t edge_label, const Any& value,
153  size_t offset);
154 
155  size_t get_in_csr_index(label_t src_label, label_t dst_label,
156  label_t edge_label) const;
157 
158  size_t get_out_csr_index(label_t src_label, label_t dst_label,
159  label_t edge_label) const;
160 
161  bool oid_to_lid(label_t label, const Any& oid, vid_t& lid) const;
162 
163  Any lid_to_oid(label_t label, vid_t lid) const;
164 
165  void release();
166 
167  void applyVerticesUpdates();
168 
169  void applyEdgesUpdates();
170 
176 
177  grape::InArchive arc_;
178  int op_num_;
179 
182 
183  std::vector<std::shared_ptr<IdIndexerBase<vid_t>>> added_vertices_;
184  std::vector<vid_t> added_vertices_base_;
185  std::vector<vid_t> vertex_nums_;
186  std::vector<ska::flat_hash_map<vid_t, vid_t>> vertex_offsets_;
187  std::vector<Table> extra_vertex_properties_;
188 
189  std::vector<ska::flat_hash_map<vid_t, std::vector<vid_t>>> added_edges_;
190  std::vector<ska::flat_hash_map<
191  vid_t, ska::flat_hash_map<vid_t, std::pair<Any, size_t>>>>
193 
194  std::vector<std::string> sv_vec_;
195 };
196 
197 } // namespace gs
198 
199 #endif // GRAPHSCOPE_DATABASE_UPDATE_TRANSACTION_H_
gs::UpdateTransaction::AddVertex
bool AddVertex(label_t label, const Any &oid, const std::vector< Any > &props)
Definition: update_transaction.cc:117
gs::UpdateTransaction::vertex_iterator::txn_
UpdateTransaction * txn_
Definition: update_transaction.h:79
gs::UpdateTransaction::edge_iterator::~edge_iterator
~edge_iterator()
gs::Any
Definition: types.h:383
gs::UpdateTransaction::edge_iterator::txn_
UpdateTransaction * txn_
Definition: update_transaction.h:119
gs::UpdateTransaction::added_edges_
std::vector< ska::flat_hash_map< vid_t, std::vector< vid_t > > > added_edges_
Definition: update_transaction.h:189
gs::UpdateTransaction::vertex_iterator
Definition: update_transaction.h:57
gs::timestamp_t
uint32_t timestamp_t
Definition: types.h:30
types.h
gs::UpdateTransaction::edge_iterator::GetEdgeLabel
label_t GetEdgeLabel() const
Definition: update_transaction.cc:365
gs::UpdateTransaction::edge_iterator::IsValid
bool IsValid() const
Definition: update_transaction.cc:322
gs::UpdateTransaction::extra_vertex_properties_
std::vector< Table > extra_vertex_properties_
Definition: update_transaction.h:187
gs::UpdateTransaction::vertex_nums_
std::vector< vid_t > vertex_nums_
Definition: update_transaction.h:185
gs::UpdateTransaction::alloc_
Allocator & alloc_
Definition: update_transaction.h:172
gs::UpdateTransaction::edge_iterator::v_
vid_t v_
Definition: update_transaction.h:110
gs::vid_t
uint32_t vid_t
Definition: types.h:31
gs::UpdateTransaction::vertex_iterator::num_
vid_t & num_
Definition: update_transaction.h:78
gs::UpdateTransaction::timestamp_
timestamp_t timestamp_
Definition: update_transaction.h:175
gs::UpdateTransaction::edge_iterator::init_iter_
std::shared_ptr< CsrConstEdgeIterBase > init_iter_
Definition: update_transaction.h:118
gs::UpdateTransaction::edge_label_num_
size_t edge_label_num_
Definition: update_transaction.h:181
gs::UpdateTransaction::vertex_offsets_
std::vector< ska::flat_hash_map< vid_t, vid_t > > vertex_offsets_
Definition: update_transaction.h:186
gs::UpdateTransaction::added_vertices_
std::vector< std::shared_ptr< IdIndexerBase< vid_t > > > added_vertices_
Definition: update_transaction.h:183
gs::UpdateTransaction::sv_vec_
std::vector< std::string > sv_vec_
Definition: update_transaction.h:194
gs::UpdateTransaction::GetVertexField
Any GetVertexField(label_t label, vid_t lid, int col_id) const
Definition: update_transaction.cc:416
gs::UpdateTransaction::vertex_label_num_
size_t vertex_label_num_
Definition: update_transaction.h:180
gs
Definition: adj_list.h:23
gs::UpdateTransaction::vm_
VersionManager & vm_
Definition: update_transaction.h:174
gs::UpdateTransaction::edge_iterator::neighbor_label_
label_t neighbor_label_
Definition: update_transaction.h:112
gs::UpdateTransaction::added_vertices_base_
std::vector< vid_t > added_vertices_base_
Definition: update_transaction.h:184
gs::UpdateTransaction::vertex_iterator::GetField
Any GetField(int col_id) const
Definition: update_transaction.cc:265
gs::UpdateTransaction::release
void release()
Definition: update_transaction.cc:701
gs::UpdateTransaction::graph_
MutablePropertyFragment & graph_
Definition: update_transaction.h:171
gs::UpdateTransaction::batch_commit
void batch_commit(UpdateBatch &batch)
Definition: update_transaction.cc:718
gs::UpdateTransaction::timestamp
timestamp_t timestamp() const
Definition: update_transaction.cc:93
gs::UpdateTransaction::GetVertexIterator
vertex_iterator GetVertexIterator(label_t label)
Definition: update_transaction.cc:369
gs::UpdateTransaction::edge_iterator::edge_label_
label_t edge_label_
Definition: update_transaction.h:113
gs::UpdateTransaction::edge_iterator::Next
void Next()
Definition: update_transaction.cc:326
gs::ArenaAllocator
Definition: allocators.h:29
gs::UpdateTransaction::UpdateTransaction
UpdateTransaction(MutablePropertyFragment &graph, Allocator &alloc, const std::string &work_dir, WalWriter &logger, VersionManager &vm, timestamp_t timestamp)
Definition: update_transaction.cc:27
gs::MutablePropertyFragment
Definition: mutable_property_fragment.h:37
gs::UpdateTransaction::edge_iterator::Forward
void Forward(size_t offset)
Definition: update_transaction.cc:340
gs::UpdateTransaction::edge_iterator::added_edges_end_
const vid_t * added_edges_end_
Definition: update_transaction.h:116
gs::UpdateTransaction::oid_to_lid
bool oid_to_lid(label_t label, const Any &oid, vid_t &lid) const
Definition: update_transaction.cc:677
gs::UpdateTransaction::get_out_csr_index
size_t get_out_csr_index(label_t src_label, label_t dst_label, label_t edge_label) const
Definition: update_transaction.cc:669
gs::UpdateTransaction::vertex_iterator::SetField
bool SetField(int col_id, const Any &value)
Definition: update_transaction.cc:269
gs::WalWriter
Definition: wal.h:50
gs::UpdateTransaction::SetVertexField
bool SetVertexField(label_t label, vid_t lid, int col_id, const Any &value)
Definition: update_transaction.cc:428
gs::UpdateTransaction::~UpdateTransaction
~UpdateTransaction()
Definition: update_transaction.cc:91
allocators.h
gs::UpdateTransaction::lid_to_oid
Any lid_to_oid(label_t label, vid_t lid) const
Definition: update_transaction.cc:690
gs::UpdateTransaction::applyEdgesUpdates
void applyEdgesUpdates()
Definition: update_transaction.cc:798
gs::UpdateTransaction::vertex_iterator::IsValid
bool IsValid() const
Definition: update_transaction.cc:253
gs::GraphDBSession
Definition: graph_db_session.h:36
gs::UpdateTransaction::set_edge_data_with_offset
void set_edge_data_with_offset(bool dir, label_t label, vid_t v, label_t neighbor_label, vid_t nbr, label_t edge_label, const Any &value, size_t offset)
Definition: update_transaction.cc:483
gs::UpdateTransaction::vertex_iterator::Goto
void Goto(vid_t target)
Definition: update_transaction.cc:255
gs::VersionManager
Definition: version_manager.h:34
gs::UpdateTransaction::vertex_iterator::Next
void Next()
Definition: update_transaction.cc:254
gs::UpdateTransaction::arc_
grape::InArchive arc_
Definition: update_transaction.h:177
gs::UpdateTransaction::AddEdge
bool AddEdge(label_t src_label, const Any &src, label_t dst_label, const Any &dst, label_t edge_label, const Any &value)
Definition: update_transaction.cc:170
gs::UpdateTransaction::logger_
WalWriter & logger_
Definition: update_transaction.h:173
gs::UpdateTransaction::edge_iterator::offset_
size_t offset_
Definition: update_transaction.h:120
id_indexer.h
types.h
gs::UpdateTransaction::op_num_
int op_num_
Definition: update_transaction.h:178
gs::UpdateTransaction::applyVerticesUpdates
void applyVerticesUpdates()
Definition: update_transaction.cc:757
gs::UpdateTransaction::edge_iterator::edge_iterator
edge_iterator(bool dir, label_t label, vid_t v, label_t neighbor_label, label_t edge_label, const vid_t *aeb, const vid_t *aee, std::shared_ptr< CsrConstEdgeIterBase > init_iter, UpdateTransaction *txn)
Definition: update_transaction.cc:274
gs::UpdateTransaction::updated_edge_data_
std::vector< ska::flat_hash_map< vid_t, ska::flat_hash_map< vid_t, std::pair< Any, size_t > > > > updated_edge_data_
Definition: update_transaction.h:192
gs::UpdateTransaction::edge_iterator::label_
label_t label_
Definition: update_transaction.h:109
gs::UpdateTransaction::vertex_iterator::~vertex_iterator
~vertex_iterator()
gs::UpdateTransaction::edge_iterator::GetNeighborLabel
label_t GetNeighborLabel() const
Definition: update_transaction.cc:361
gs::UpdateTransaction::GetInEdgeIterator
edge_iterator GetInEdgeIterator(label_t label, vid_t u, label_t neighbor_label, label_t edge_label)
Definition: update_transaction.cc:395
gs::UpdateTransaction::vertex_iterator::vertex_iterator
vertex_iterator(label_t label, vid_t cur, vid_t &num, UpdateTransaction *txn)
Definition: update_transaction.cc:248
gs::UpdateTransaction::get_in_csr_index
size_t get_in_csr_index(label_t src_label, label_t dst_label, label_t edge_label) const
Definition: update_transaction.cc:663
gs::UpdateTransaction::edge_iterator::added_edges_cur_
const vid_t * added_edges_cur_
Definition: update_transaction.h:115
gs::UpdateTransaction::SetEdgeData
void SetEdgeData(bool dir, label_t label, vid_t v, label_t neighbor_label, vid_t nbr, label_t edge_label, const Any &value)
Definition: update_transaction.cc:472
gs::UpdateTransaction::edge_iterator::dir_
bool dir_
Definition: update_transaction.h:107
mutable_csr.h
gs::UpdateTransaction::IngestWal
static void IngestWal(MutablePropertyFragment &graph, const std::string &work_dir, uint32_t timestamp, char *data, size_t length, Allocator &alloc)
Definition: update_transaction.cc:529
gs::UpdateTransaction::vertex_iterator::cur_
vid_t cur_
Definition: update_transaction.h:76
gs::UpdateTransaction
Definition: update_transaction.h:38
gs::UpdateTransaction::vertex_iterator::GetId
Any GetId() const
Definition: update_transaction.cc:259
transaction_utils.h
gs::UpdateTransaction::Abort
void Abort()
Definition: update_transaction.cc:115
gs::UpdateTransaction::GetUpdatedEdgeData
bool GetUpdatedEdgeData(bool dir, label_t label, vid_t v, label_t neighbor_label, vid_t nbr, label_t edge_label, Any &ret) const
Definition: update_transaction.cc:509
gs::UpdateTransaction::GetOutEdgeIterator
edge_iterator GetOutEdgeIterator(label_t label, vid_t u, label_t neighbor_label, label_t edge_label)
Definition: update_transaction.cc:374
gs::UpdateTransaction::edge_iterator::SetData
void SetData(const Any &value)
Definition: update_transaction.cc:309
gs::label_t
uint8_t label_t
Definition: types.h:32
gs::UpdateTransaction::vertex_iterator::label_
label_t label_
Definition: update_transaction.h:75
gs::UpdateTransaction::vertex_iterator::GetIndex
vid_t GetIndex() const
Definition: update_transaction.cc:263
gs::UpdateTransaction::Commit
void Commit()
Definition: update_transaction.cc:95
table.h
gs::UpdateTransaction::edge_iterator::GetNeighbor
vid_t GetNeighbor() const
Definition: update_transaction.cc:353
gs::UpdateTransaction::edge_iterator::GetData
Any GetData() const
Definition: update_transaction.cc:290
gs::UpdateTransaction::edge_iterator
Definition: update_transaction.h:82
gs::UpdateBatch
Definition: transaction_utils.h:113