mapleFU commented on code in PR #2296:
URL: https://github.com/apache/kvrocks/pull/2296#discussion_r1597468775


##########
src/storage/storage.h:
##########
@@ -122,6 +116,83 @@ struct DBStats {
   alignas(CACHE_LINE_SIZE) std::atomic<uint_fast64_t> keyspace_misses = 0;
 };
 
+class ColumnFamilyConfig {
+ public:
+  ColumnFamilyConfig(ColumnFamilyID id, std::string_view name, bool is_minor)
+      : id_(id), name_(name), is_minor_(is_minor) {}
+  ColumnFamilyID Id() const { return id_; }
+  std::string_view Name() const { return name_; }
+  bool IsMinor() const { return is_minor_; }
+
+ private:
+  ColumnFamilyID id_;
+  std::string_view name_;
+  bool is_minor_;
+};
+
+constexpr const std::string_view kPrimarySubkeyColumnFamilyName = "default";
+constexpr const std::string_view kMetadataColumnFamilyName = "metadata";
+constexpr const std::string_view kSecondarySubkeyColumnFamilyName = 
"zset_score";
+constexpr const std::string_view kPubSubColumnFamilyName = "pubsub";
+constexpr const std::string_view kPropagateColumnFamilyName = "propagate";
+constexpr const std::string_view kStreamColumnFamilyName = "stream";
+constexpr const std::string_view kSearchColumnFamilyName = "search";
+
+class ColumnFamilyConfigs {
+ public:
+  /// DefaultSubkeyColumnFamily is the default column family in rocksdb.
+  /// In kvrocks, we use it to store the data if metadata is not enough.
+  static ColumnFamilyConfig PrimarySubkeyColumnFamily() {
+    ColumnFamilyConfig subkey_cf(ColumnFamilyID::PrimarySubkey, 
kPrimarySubkeyColumnFamilyName, /*is_minor=*/false);
+    return subkey_cf;
+  }
+
+  /// MetadataColumnFamily stores the metadata of data-structures.
+  static ColumnFamilyConfig MetadataColumnFamily() {
+    ColumnFamilyConfig metadata_cf(ColumnFamilyID::Metadata, 
kMetadataColumnFamilyName, /*is_minor=*/false);
+    return metadata_cf;
+  }
+
+  /// SecondarySubkeyColumnFamily stores the score of zset or other secondary 
subkey.
+  /// See https://kvrocks.apache.org/community/data-structure-on-rocksdb#zset 
for more details.
+  static ColumnFamilyConfig SecondarySubkeyColumnFamily() {
+    ColumnFamilyConfig zset_score_cf(ColumnFamilyID::SecondarySubkey, 
kSecondarySubkeyColumnFamilyName,
+                                     /*is_minor=*/true);
+    return zset_score_cf;
+  }
+
+  /// PubSubColumnFamily stores the pubsub data.
+  static ColumnFamilyConfig PubSubColumnFamily() {
+    ColumnFamilyConfig pub_sub_cf(ColumnFamilyID::PubSub, 
kPubSubColumnFamilyName, /*is_minor=*/true);
+    return pub_sub_cf;
+  }
+
+  static ColumnFamilyConfig PropagateColumnFamily() {
+    ColumnFamilyConfig propagate_cf(ColumnFamilyID::Propagate, 
kPropagateColumnFamilyName, /*is_minor=*/true);
+    return propagate_cf;
+  }
+
+  static ColumnFamilyConfig StreamColumnFamily() {
+    ColumnFamilyConfig stream_cf(ColumnFamilyID::Stream, 
kStreamColumnFamilyName, /*is_minor=*/true);
+    return stream_cf;
+  }
+
+  static ColumnFamilyConfig SearchColumnFamily() {
+    ColumnFamilyConfig search_cf(ColumnFamilyID::Search, 
kSearchColumnFamilyName, /*is_minor=*/true);
+    return search_cf;
+  }
+
+  /// ListAllColumnFamily returns all column families in kvrocks.
+  static const std::vector<ColumnFamilyConfig> &ListAllColumnFamily() {

Review Comment:
   Do we really requires this because usally the caller know the cf it requires 
here?



-- 
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.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to