OoOJoin  0.0.1
The next generation of out-of-order join operator
MultiThreadHashTable.h
Go to the documentation of this file.
1 
2 #ifndef _JOINALGO_NPJ_MULTITHREADHASHTABLE_H_
3 #define _JOINALGO_NPJ_MULTITHREADHASHTABLE_H_
4 #include <Common/Tuples.h>
5 #include <stdint.h>
6 #include <memory>
7 #include <condition_variable>
8 #include <mutex>
9 #include <vector>
10 namespace OoOJoin {
11 
18 #define BUCKET_SIZE 4
19 class MtBucket;
20 typedef std::shared_ptr<MtBucket> MtBucketPtr;
21 //typedef vector<TuplePtr> NPJTuplePtr;
22 typedef TrackTuplePtr NPJTuplePtr;
30 //template <class cell_t>
31 class MtBucket {
32  private:
33  std::mutex m_mut;
34  //vector<NPJTuplePtr>tuples;
35  TrackTuplePtr tuples[BUCKET_SIZE];
36  MtBucketPtr next = nullptr;
37  size_t count = 0;
38  public:
39  /*MtBucket(){
40  }
41  ~MtBucket(){}*/
45  void lock() {
46  while (!m_mut.try_lock());
47  }
51  void unlock() {
52  m_mut.unlock();
53  }
58  void duplicatedInsert(NPJTuplePtr tp);
62  size_t probeTuple(NPJTuplePtr tp);
67  /*MtBucketPtr getNext(){
68  return next;
69  }*/
70 };
77  private:
78 
79  public:
80  keyType hash_mask;
81  keyType skip_bits;
82  std::vector<MtBucket> buckets;
88  MultiThreadHashTable(size_t bks);
97  void buildTable(NPJTuplePtr *tps, size_t len);
103  size_t probeTuple(NPJTuplePtr tp);
104 
105 };
106 typedef std::shared_ptr<MultiThreadHashTable> MultiThreadHashTablePtr;
110 }
111 #endif //ALIANCEDB_INCLUDE_JOINALGO_NPJ_MULTITHREADHASHTABLE_H_
The multithread-supported bucket.
Definition: MultiThreadHashTable.h:31
void unlock()
unlock this bucket
Definition: MultiThreadHashTable.h:51
size_t probeTuple(NPJTuplePtr tp)
probe one tuple, just on the bucket
Definition: MultiThreadHashTable.cpp:48
void duplicatedInsert(NPJTuplePtr tp)
Insert a tuple, allowing key duplication.
Definition: MultiThreadHashTable.cpp:28
void lock()
lock this bucket
Definition: MultiThreadHashTable.h:45
The multithread-supported hash table, holding buckets.
Definition: MultiThreadHashTable.h:76
size_t probeTuple(NPJTuplePtr tp)
probe one tuple
Definition: MultiThreadHashTable.cpp:91
void buildTable(NPJTuplePtr *tps, size_t len)
build the hashtable from tuple memory aray
Definition: MultiThreadHashTable.cpp:75
#define BUCKET_SIZE
Definition: MultiThreadHashTable.h:18
uint64_t keyType
Definition: Tuples.h:18
std::shared_ptr< class TrackTuple > TrackTuplePtr
The class to describe a shared pointer to TrackTuple.
Definition: Tuples.h:171
Definition: OperatorTable.cpp:7