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_
gs::UpdateTransaction::AddVertex
bool AddVertex(label_t label, const Any &oid, const std::vector< Any > &props)
Definition: update_transaction.cc:132
gs::UpdateTransaction::vertex_iterator::txn_
UpdateTransaction * txn_
Definition: update_transaction.h:86
gs::UpdateTransaction::run
std::string run(const std::string &cypher, const std::map< std::string, std::string > &params)
Definition: update_transaction.cc:29
gs::UpdateTransaction::edge_iterator::~edge_iterator
~edge_iterator()
gs::Any
Definition: types.h:399
gs::UpdateTransaction::edge_iterator::txn_
UpdateTransaction * txn_
Definition: update_transaction.h:126
gs::UpdateTransaction::added_edges_
std::vector< ska::flat_hash_map< vid_t, std::vector< vid_t > > > added_edges_
Definition: update_transaction.h:201
gs::UpdateTransaction::vertex_iterator
Definition: update_transaction.h:64
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:380
gs::MutablePropertyFragment::schema
const Schema & schema() const
Definition: mutable_property_fragment.cc:391
gs::UpdateTransaction::edge_iterator::IsValid
bool IsValid() const
Definition: update_transaction.cc:337
gs::UpdateTransaction::extra_vertex_properties_
std::vector< Table > extra_vertex_properties_
Definition: update_transaction.h:199
gs::UpdateTransaction::vertex_nums_
std::vector< vid_t > vertex_nums_
Definition: update_transaction.h:197
gs::UpdateTransaction::alloc_
Allocator & alloc_
Definition: update_transaction.h:184
gs::UpdateTransaction::edge_iterator::v_
vid_t v_
Definition: update_transaction.h:117
gs::vid_t
uint32_t vid_t
Definition: types.h:31
gs::UpdateTransaction::vertex_iterator::num_
vid_t & num_
Definition: update_transaction.h:85
gs::UpdateTransaction::timestamp_
timestamp_t timestamp_
Definition: update_transaction.h:187
gs::UpdateTransaction::edge_iterator::init_iter_
std::shared_ptr< CsrConstEdgeIterBase > init_iter_
Definition: update_transaction.h:125
gs::UpdateTransaction::edge_label_num_
size_t edge_label_num_
Definition: update_transaction.h:193
gs::UpdateTransaction::vertex_offsets_
std::vector< ska::flat_hash_map< vid_t, vid_t > > vertex_offsets_
Definition: update_transaction.h:198
gs::UpdateTransaction::added_vertices_
std::vector< std::shared_ptr< IdIndexerBase< vid_t > > > added_vertices_
Definition: update_transaction.h:195
gs::UpdateTransaction::sv_vec_
std::vector< std::string > sv_vec_
Definition: update_transaction.h:206
gs::UpdateTransaction::GetSession
const GraphDBSession & GetSession() const
Definition: update_transaction.cc:915
gs::UpdateTransaction::GetVertexField
Any GetVertexField(label_t label, vid_t lid, int col_id) const
Definition: update_transaction.cc:431
gs::UpdateTransaction::vertex_label_num_
size_t vertex_label_num_
Definition: update_transaction.h:192
gs
Definition: adj_list.h:23
gs::UpdateTransaction::vm_
VersionManager & vm_
Definition: update_transaction.h:186
gs::UpdateTransaction::edge_iterator::neighbor_label_
label_t neighbor_label_
Definition: update_transaction.h:119
gs::UpdateTransaction::session_
const GraphDBSession & session_
Definition: update_transaction.h:181
gs::UpdateTransaction::Commit
bool Commit()
Definition: update_transaction.cc:105
gs::UpdateTransaction::added_vertices_base_
std::vector< vid_t > added_vertices_base_
Definition: update_transaction.h:196
gs::UpdateTransaction::vertex_iterator::GetField
Any GetField(int col_id) const
Definition: update_transaction.cc:280
gs::UpdateTransaction::release
void release()
Definition: update_transaction.cc:720
gs::UpdateTransaction::graph_
MutablePropertyFragment & graph_
Definition: update_transaction.h:183
gs::UpdateTransaction::timestamp
timestamp_t timestamp() const
Definition: update_transaction.cc:103
gs::UpdateTransaction::GetVertexIterator
vertex_iterator GetVertexIterator(label_t label)
Definition: update_transaction.cc:384
gs::UpdateTransaction::edge_iterator::edge_label_
label_t edge_label_
Definition: update_transaction.h:120
gs::UpdateTransaction::edge_iterator::Next
void Next()
Definition: update_transaction.cc:341
gs::UpdateTransaction::schema
const Schema & schema() const
Definition: update_transaction.h:53
gs::ArenaAllocator
Definition: allocators.h:29
gs::MutablePropertyFragment
Definition: mutable_property_fragment.h:37
gs::UpdateTransaction::edge_iterator::Forward
void Forward(size_t offset)
Definition: update_transaction.cc:355
gs::UpdateTransaction::batch_commit
bool batch_commit(UpdateBatch &batch)
Definition: update_transaction.cc:737
gs::UpdateTransaction::edge_iterator::added_edges_end_
const vid_t * added_edges_end_
Definition: update_transaction.h:123
gs::UpdateTransaction::oid_to_lid
bool oid_to_lid(label_t label, const Any &oid, vid_t &lid) const
Definition: update_transaction.cc:696
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:688
gs::UpdateTransaction::vertex_iterator::SetField
bool SetField(int col_id, const Any &value)
Definition: update_transaction.cc:284
gs::UpdateTransaction::SetVertexField
bool SetVertexField(label_t label, vid_t lid, int col_id, const Any &value)
Definition: update_transaction.cc:447
gs::UpdateTransaction::~UpdateTransaction
~UpdateTransaction()
Definition: update_transaction.cc:101
gs::Schema
Definition: schema.h:29
allocators.h
gs::UpdateTransaction::lid_to_oid
Any lid_to_oid(label_t label, vid_t lid) const
Definition: update_transaction.cc:709
gs::UpdateTransaction::UpdateTransaction
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
gs::UpdateTransaction::applyEdgesUpdates
void applyEdgesUpdates()
Definition: update_transaction.cc:822
gs::UpdateTransaction::vertex_iterator::IsValid
bool IsValid() const
Definition: update_transaction.cc:268
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:502
gs::UpdateTransaction::vertex_iterator::Goto
void Goto(vid_t target)
Definition: update_transaction.cc:270
gs::VersionManager
Definition: version_manager.h:34
gs::UpdateTransaction::vertex_iterator::Next
void Next()
Definition: update_transaction.cc:269
gs::UpdateTransaction::arc_
grape::InArchive arc_
Definition: update_transaction.h:189
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:185
gs::UpdateTransaction::edge_iterator::offset_
size_t offset_
Definition: update_transaction.h:127
id_indexer.h
types.h
gs::UpdateTransaction::op_num_
int op_num_
Definition: update_transaction.h:190
gs::UpdateTransaction::applyVerticesUpdates
void applyVerticesUpdates()
Definition: update_transaction.cc:781
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:289
gs::UpdateTransaction::GetVertexId
Any GetVertexId(label_t label, vid_t lid) const
Definition: update_transaction.cc:443
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:204
gs::UpdateTransaction::edge_iterator::label_
label_t label_
Definition: update_transaction.h:116
gs::UpdateTransaction::vertex_iterator::~vertex_iterator
~vertex_iterator()
gs::UpdateTransaction::edge_iterator::GetNeighborLabel
label_t GetNeighborLabel() const
Definition: update_transaction.cc:376
gs::UpdateTransaction::GetInEdgeIterator
edge_iterator GetInEdgeIterator(label_t label, vid_t u, label_t neighbor_label, label_t edge_label)
Definition: update_transaction.cc:410
gs::UpdateTransaction::vertex_iterator::vertex_iterator
vertex_iterator(label_t label, vid_t cur, vid_t &num, UpdateTransaction *txn)
Definition: update_transaction.cc:263
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:682
gs::UpdateTransaction::edge_iterator::added_edges_cur_
const vid_t * added_edges_cur_
Definition: update_transaction.h:122
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:491
gs::UpdateTransaction::edge_iterator::dir_
bool dir_
Definition: update_transaction.h:114
mutable_csr.h
gs::UpdateTransaction::logger_
IWalWriter & logger_
Definition: update_transaction.h:185
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:548
gs::UpdateTransaction::vertex_iterator::cur_
vid_t cur_
Definition: update_transaction.h:83
gs::UpdateTransaction
Definition: update_transaction.h:39
gs::UpdateTransaction::vertex_iterator::GetId
Any GetId() const
Definition: update_transaction.cc:274
transaction_utils.h
gs::UpdateTransaction::Abort
void Abort()
Definition: update_transaction.cc:130
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:528
gs::UpdateTransaction::GetOutEdgeIterator
edge_iterator GetOutEdgeIterator(label_t label, vid_t u, label_t neighbor_label, label_t edge_label)
Definition: update_transaction.cc:389
gs::UpdateTransaction::edge_iterator::SetData
void SetData(const Any &value)
Definition: update_transaction.cc:324
gs::label_t
uint8_t label_t
Definition: types.h:32
gs::UpdateTransaction::vertex_iterator::label_
label_t label_
Definition: update_transaction.h:82
gs::UpdateTransaction::vertex_iterator::GetIndex
vid_t GetIndex() const
Definition: update_transaction.cc:278
table.h
gs::UpdateTransaction::edge_iterator::GetNeighbor
vid_t GetNeighbor() const
Definition: update_transaction.cc:368
gs::UpdateTransaction::edge_iterator::GetData
Any GetData() const
Definition: update_transaction.cc:305
gs::IWalWriter
Definition: wal.h:57
gs::UpdateTransaction::edge_iterator
Definition: update_transaction.h:89
gs::UpdateBatch
Definition: transaction_utils.h:113