|
25 | 25 | #include "storage/src/lists_meta_value_format.h" |
26 | 26 | #include "storage/src/custom_comparator.h" |
27 | 27 |
|
| 28 | +// Comparator instances |
| 29 | +const rocksdb::Comparator* ListsDataKeyComparator() { |
| 30 | + static storage::ListsDataKeyComparatorImpl ldkc; |
| 31 | + return &ldkc; |
| 32 | +} |
| 33 | + |
| 34 | +const rocksdb::Comparator* ZSetsScoreKeyComparator() { |
| 35 | + static storage::ZSetsScoreKeyComparatorImpl zskc; |
| 36 | + return &zskc; |
| 37 | +} |
| 38 | + |
28 | 39 | // Utility function to check if a directory exists |
29 | 40 | bool DirectoryExists(const std::string& path) { |
30 | 41 | struct stat st; |
@@ -478,7 +489,13 @@ void AnalyzeZsets(const std::string& path, std::vector<KeyInfo>& key_infos, cons |
478 | 489 |
|
479 | 490 | // 添加所有列族到描述符 |
480 | 491 | for (const auto& cf_name : column_families) { |
481 | | - cf_descriptors.emplace_back(cf_name, rocksdb::ColumnFamilyOptions()); |
| 492 | + if (cf_name == "score_cf") { |
| 493 | + rocksdb::ColumnFamilyOptions score_cf_ops; |
| 494 | + score_cf_ops.comparator = ZSetsScoreKeyComparator(); |
| 495 | + cf_descriptors.emplace_back(cf_name, score_cf_ops); |
| 496 | + } else { |
| 497 | + cf_descriptors.emplace_back(cf_name, rocksdb::ColumnFamilyOptions()); |
| 498 | + } |
482 | 499 | } |
483 | 500 |
|
484 | 501 | std::vector<rocksdb::ColumnFamilyHandle*> handles; |
@@ -652,7 +669,11 @@ void AnalyzeLists(const std::string& path, std::vector<KeyInfo>& key_infos, cons |
652 | 669 | rocksdb::DBOptions db_options; |
653 | 670 | std::vector<rocksdb::ColumnFamilyDescriptor> column_families; |
654 | 671 | column_families.emplace_back(rocksdb::kDefaultColumnFamilyName, rocksdb::ColumnFamilyOptions()); |
655 | | - column_families.emplace_back("data_cf", rocksdb::ColumnFamilyOptions()); |
| 672 | + |
| 673 | + // 使用自定义比较器 |
| 674 | + rocksdb::ColumnFamilyOptions data_cf_ops; |
| 675 | + data_cf_ops.comparator = ListsDataKeyComparator(); |
| 676 | + column_families.emplace_back("data_cf", data_cf_ops); |
656 | 677 |
|
657 | 678 | std::vector<rocksdb::ColumnFamilyHandle*> handles; |
658 | 679 | rocksdb::DB* db; |
|
0 commit comments