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 IWalWriter;
36 class VersionManager;
37 class GraphDBSession;
38 
40  public:
41  std::string run(const std::string& cypher,
42  const std::map<std::string, std::string>& params);
43 
44  UpdateTransaction(const GraphDBSession& session,
45  MutablePropertyFragment& graph, Allocator& alloc,
46  const std::string& work_dir, IWalWriter& logger,
48 
50 
51  timestamp_t timestamp() const;
52 
53  const Schema& schema() const { return graph_.schema(); }
54 
55  bool Commit();
56 
57  void Abort();
58 
59  bool AddVertex(label_t label, const Any& oid, const std::vector<Any>& props);
60 
61  bool AddEdge(label_t src_label, const Any& src, label_t dst_label,
62  const Any& dst, label_t edge_label, const Any& value);
63 
65  public:
66  vertex_iterator(label_t label, vid_t cur, vid_t& num,
67  UpdateTransaction* txn);
69  bool IsValid() const;
70  void Next();
71  void Goto(vid_t target);
72 
73  Any GetId() const;
74 
75  vid_t GetIndex() const;
76 
77  Any GetField(int col_id) const;
78 
79  bool SetField(int col_id, const Any& value);
80 
81  private:
84 
87  };
88 
89  class edge_iterator {
90  public:
91  edge_iterator(bool dir, label_t label, vid_t v, label_t neighbor_label,
92  label_t edge_label, const vid_t* aeb, const vid_t* aee,
93  std::shared_ptr<CsrConstEdgeIterBase> init_iter,
94  UpdateTransaction* txn);
96 
97  Any GetData() const;
98 
99  void SetData(const Any& value);
100 
101  bool IsValid() const;
102 
103  void Next();
104 
105  void Forward(size_t offset);
106 
107  vid_t GetNeighbor() const;
108 
109  label_t GetNeighborLabel() const;
110 
111  label_t GetEdgeLabel() const;
112 
113  private:
114  bool dir_;
115 
118 
121 
124 
125  std::shared_ptr<CsrConstEdgeIterBase> init_iter_;
127  size_t offset_;
128  };
129 
131 
133  label_t neighbor_label, label_t edge_label);
134 
136  label_t neighbor_label, label_t edge_label);
137 
138  Any GetVertexField(label_t label, vid_t lid, int col_id) const;
139 
140  bool SetVertexField(label_t label, vid_t lid, int col_id, const Any& value);
141 
142  void SetEdgeData(bool dir, label_t label, vid_t v, label_t neighbor_label,
143  vid_t nbr, label_t edge_label, const Any& value);
144 
145  bool GetUpdatedEdgeData(bool dir, label_t label, vid_t v,
146  label_t neighbor_label, vid_t nbr, label_t edge_label,
147  Any& ret) const;
148 
149  static void IngestWal(MutablePropertyFragment& graph,
150  const std::string& work_dir, uint32_t timestamp,
151  char* data, size_t length, Allocator& alloc);
152  Any GetVertexId(label_t label, vid_t lid) const;
153 
154  const GraphDBSession& GetSession() const;
155 
156  private:
157  friend class GraphDBSession;
158  bool batch_commit(UpdateBatch& batch);
159 
160  void set_edge_data_with_offset(bool dir, label_t label, vid_t v,
161  label_t neighbor_label, vid_t nbr,
162  label_t edge_label, const Any& value,
163  size_t offset);
164 
165  size_t get_in_csr_index(label_t src_label, label_t dst_label,
166  label_t edge_label) const;
167 
168  size_t get_out_csr_index(label_t src_label, label_t dst_label,
169  label_t edge_label) const;
170 
171  bool oid_to_lid(label_t label, const Any& oid, vid_t& lid) const;
172 
173  Any lid_to_oid(label_t label, vid_t lid) const;
174 
175  void release();
176 
177  void applyVerticesUpdates();
178 
179  void applyEdgesUpdates();
180 
182 
188 
189  grape::InArchive arc_;
190  int op_num_;
191 
194 
195  std::vector<std::shared_ptr<IdIndexerBase<vid_t>>> added_vertices_;
196  std::vector<vid_t> added_vertices_base_;
197  std::vector<vid_t> vertex_nums_;
198  std::vector<ska::flat_hash_map<vid_t, vid_t>> vertex_offsets_;
199  std::vector<Table> extra_vertex_properties_;
200 
201  std::vector<ska::flat_hash_map<vid_t, std::vector<vid_t>>> added_edges_;
202  std::vector<ska::flat_hash_map<
203  vid_t, ska::flat_hash_map<vid_t, std::pair<Any, size_t>>>>
205 
206  std::vector<std::string> sv_vec_;
207 };
208 
209 } // namespace gs
210 
211 #endif // GRAPHSCOPE_DATABASE_UPDATE_TRANSACTION_H_
Definition: allocators.h:29
Definition: graph_db_session.h:36
Definition: wal.h:57
Definition: mutable_property_fragment.h:37
const Schema & schema() const
Definition: mutable_property_fragment.cc:391
Definition: schema.h:29
Definition: transaction_utils.h:113
Definition: update_transaction.h:89
bool dir_
Definition: update_transaction.h:114
label_t GetEdgeLabel() const
Definition: update_transaction.cc:380
void Next()
Definition: update_transaction.cc:341
vid_t GetNeighbor() const
Definition: update_transaction.cc:368
void SetData(const Any &value)
Definition: update_transaction.cc:324
vid_t v_
Definition: update_transaction.h:117
std::shared_ptr< CsrConstEdgeIterBase > init_iter_
Definition: update_transaction.h:125
label_t label_
Definition: update_transaction.h:116
const vid_t * added_edges_end_
Definition: update_transaction.h:123
label_t edge_label_
Definition: update_transaction.h:120
const vid_t * added_edges_cur_
Definition: update_transaction.h:122
bool IsValid() const
Definition: update_transaction.cc:337
Any GetData() const
Definition: update_transaction.cc:305
size_t offset_
Definition: update_transaction.h:127
void Forward(size_t offset)
Definition: update_transaction.cc:355
label_t neighbor_label_
Definition: update_transaction.h:119
UpdateTransaction * txn_
Definition: update_transaction.h:126
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:289
label_t GetNeighborLabel() const
Definition: update_transaction.cc:376
Definition: update_transaction.h:64
vid_t cur_
Definition: update_transaction.h:83
Any GetField(int col_id) const
Definition: update_transaction.cc:280
bool SetField(int col_id, const Any &value)
Definition: update_transaction.cc:284
bool IsValid() const
Definition: update_transaction.cc:268
vid_t GetIndex() const
Definition: update_transaction.cc:278
vertex_iterator(label_t label, vid_t cur, vid_t &num, UpdateTransaction *txn)
Definition: update_transaction.cc:263
vid_t & num_
Definition: update_transaction.h:85
Any GetId() const
Definition: update_transaction.cc:274
void Next()
Definition: update_transaction.cc:269
UpdateTransaction * txn_
Definition: update_transaction.h:86
label_t label_
Definition: update_transaction.h:82
void Goto(vid_t target)
Definition: update_transaction.cc:270
Definition: update_transaction.h:39
Allocator & alloc_
Definition: update_transaction.h:184
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:491
std::string run(const std::string &cypher, const std::map< std::string, std::string > &params)
Definition: update_transaction.cc:29
std::vector< ska::flat_hash_map< vid_t, vid_t > > vertex_offsets_
Definition: update_transaction.h:198
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:502
std::vector< vid_t > vertex_nums_
Definition: update_transaction.h:197
edge_iterator GetInEdgeIterator(label_t label, vid_t u, label_t neighbor_label, label_t edge_label)
Definition: update_transaction.cc:410
size_t get_out_csr_index(label_t src_label, label_t dst_label, label_t edge_label) const
Definition: update_transaction.cc:688
bool AddVertex(label_t label, const Any &oid, const std::vector< Any > &props)
Definition: update_transaction.cc:132
bool Commit()
Definition: update_transaction.cc:105
std::vector< Table > extra_vertex_properties_
Definition: update_transaction.h:199
bool batch_commit(UpdateBatch &batch)
Definition: update_transaction.cc:737
bool oid_to_lid(label_t label, const Any &oid, vid_t &lid) const
Definition: update_transaction.cc:696
VersionManager & vm_
Definition: update_transaction.h:186
const GraphDBSession & session_
Definition: update_transaction.h:181
std::vector< ska::flat_hash_map< vid_t, std::vector< vid_t > > > added_edges_
Definition: update_transaction.h:201
void applyEdgesUpdates()
Definition: update_transaction.cc:822
timestamp_t timestamp_
Definition: update_transaction.h:187
std::vector< vid_t > added_vertices_base_
Definition: update_transaction.h:196
vertex_iterator GetVertexIterator(label_t label)
Definition: update_transaction.cc:384
void Abort()
Definition: update_transaction.cc:130
std::vector< std::string > sv_vec_
Definition: update_transaction.h:206
Any lid_to_oid(label_t label, vid_t lid) const
Definition: update_transaction.cc:709
void release()
Definition: update_transaction.cc:720
size_t vertex_label_num_
Definition: update_transaction.h:192
size_t edge_label_num_
Definition: update_transaction.h:193
grape::InArchive arc_
Definition: update_transaction.h:189
IWalWriter & logger_
Definition: update_transaction.h:185
UpdateTransaction(const GraphDBSession &session, MutablePropertyFragment &graph, Allocator &alloc, const std::string &work_dir, IWalWriter &logger, VersionManager &vm, timestamp_t timestamp)
Definition: update_transaction.cc:35
Any GetVertexField(label_t label, vid_t lid, int col_id) const
Definition: update_transaction.cc:431
size_t get_in_csr_index(label_t src_label, label_t dst_label, label_t edge_label) const
Definition: update_transaction.cc:682
const Schema & schema() const
Definition: update_transaction.h:53
void applyVerticesUpdates()
Definition: update_transaction.cc:781
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:528
static void IngestWal(MutablePropertyFragment &graph, const std::string &work_dir, uint32_t timestamp, char *data, size_t length, Allocator &alloc)
Definition: update_transaction.cc:548
std::vector< std::shared_ptr< IdIndexerBase< vid_t > > > added_vertices_
Definition: update_transaction.h:195
MutablePropertyFragment & graph_
Definition: update_transaction.h:183
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:204
const GraphDBSession & GetSession() const
Definition: update_transaction.cc:915
int op_num_
Definition: update_transaction.h:190
bool SetVertexField(label_t label, vid_t lid, int col_id, const Any &value)
Definition: update_transaction.cc:447
~UpdateTransaction()
Definition: update_transaction.cc:101
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:185
edge_iterator GetOutEdgeIterator(label_t label, vid_t u, label_t neighbor_label, label_t edge_label)
Definition: update_transaction.cc:389
timestamp_t timestamp() const
Definition: update_transaction.cc:103
Any GetVertexId(label_t label, vid_t lid) const
Definition: update_transaction.cc:443
Definition: version_manager.h:34
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