kangpinghuang commented on issue #1390: Support zone map for column URL: https://github.com/apache/incubator-doris/issues/1390#issuecomment-508015441 here is my design: 1. define ZoneMap with serialize and deserialize class ZoneMap { public: serialize(); deserialize(); private: std::string min_value; std::string max_value; // if the whole page is null // if true, omit min_value and max_value bool is_null_page; }; 2. add ComparableEncoder to encode the value as comparable binary add a ComparableEncoder that can encode column value to comparable binary, and store them to ZoneMap. And then we can use binary to compare min/max value with predicate value directyly. do not have to care about the field type when filter the page 3. define ZoneMapBuilder class ZoneMapBuilder { Status add(ZoneMap zone_map); }; add should call zone_map's serialize api and BinaryPlainPageBuilder to store the serialized zone map value. 4. define ZoneMapDecoder class ZoneMapDecoder { Status load_zone_map(ColumnZoneMap* column_zone_map); }; load_zone_map use BinaryPlainPageDecoder to get the serialized zone map and the call ZoneMap.deserialize the get ZoneMap and the ColumnZoneMap.add(zone_map) to construct column zone map. 5. define ColumnZoneMap class ColumnZoneMap { Status add(ZoneMap page_zone_map); int compare_to_min(const std::string& value, int page_index); int compare_to_max(const std::string& value, int page_index); bool is_null_page(int page_index); private: int _page_size; // min value array std::string* _min_value; // max value array std::string* _max_value; bool* _is_null_pages; };
---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: [email protected] With regards, Apache Git Services --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
