Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Ring ¶
type Ring interface { // Count return the group number of a ring. // e.g. // the query sql is `select area, avg(age) of persons group by area;` and the area has 3 different values. // the Count will return 3. Count() int // Size return the memory size of a ring. Size() int // Dup will duplicate a new ring with the same type. Dup() Ring // Type return the type of the ring's result. Type() types.Type // String return related information of the ring. // used to show query plans. String() string // Free the ring. Free(*mheap.Mheap) // Grow allocates a new group for the ring. Grow(*mheap.Mheap) error // Grows allocates N groups for the ring. Grows(N int, _ *mheap.Mheap) error // SetLength set the group length to reduce the ring's size, the first N group wii be kept // and others will be free SetLength(N int) // Shrink used an index group to reduce the ring's size // indexes records the index number of the group which we want to keep // e.g. If indexes is [0, 2], the first group and 3rd group will be kept. Shrink(indexes []int64) // Shuffle not used now. Shuffle([]int64, *mheap.Mheap) error // Eval returns the final result of the ring. // the argument zs records the size of data source of a group item. // e.g. // If zs is [1, 2, 1], and the ring hold a group Sums, Sums is the sum of some data. // zs[0] = 1 means group 0 has 1 data. // zs[1] = 2 means group 1 has 2 date. // and data source may contain the NULL value and not always all numbers. Eval(zs []int64) *vector.Vector // Fill use a row of the vector to update the data of ring's group // i is the index number of the group // j is the index number of the row // z is the count number of the row, if N, there are other N-1 rows are same to this. // and we should update the rings N times. Fill(i int64, j int64, z int64, v *vector.Vector) // BulkFill use the whole vector to update the data of ring's group // i is the index number of the group // zs is the count number of each row. BulkFill(i int64, zs []int64, v *vector.Vector) // BatchFill use part of the vector to update the data of ring's group // os(origin-s) records information about which groups need to be updated // if length of os is N, we use first N of vps to do update work. // And if os[i] > 0, it means the ring's (vps[i]-1)th group is a new one (never been assigned a value), // Maybe this feature can help us to do some optimization work. // So we use the os as an argument but not len(os). // // ring's (vps[i]-1)th group is related to vector's (offset+i)th row. // zs[i] is count number of the row[i] // For a more detailed introduction of zs, please refer to comments of Function Fill. BatchFill(offset int64, os []uint8, vps []uint64, zs []int64, v *vector.Vector) // Add may be called merge in other databases. // It merges group1 and group2. // group1 is the i-th of ring1. group is the j-th of ring2. Add(ring2 interface{}, i int64, j int64) // BatchAdd merges multi groups of ring1 and ring2 // ring1's (vps[i]-1)th group is related to ring2's (start+i)th group // For more introduction of os, please refer to comments of Function BatchFill. BatchAdd(ring2 interface{}, start int64, os []uint8, vps []uint64) // Mul is the function to merge 2 rings when join Mul(interface{}, int64, int64, int64) }
Ring is an important structure in factorization. It allows us to compute the aggregate functions for each part before do table-join-work.
Click to show internal directories.
Click to hide internal directories.