diff options
author | Paul J. Davis <paul.joseph.davis@gmail.com> | 2020-03-02 13:39:00 -0600 |
---|---|---|
committer | Paul J. Davis <paul.joseph.davis@gmail.com> | 2020-03-05 14:18:12 -0600 |
commit | 377a3d3903bf2166f5e4b95d90f0a237672b812e (patch) | |
tree | fd5f1436b426746fe41211f65c2a90dfc764ad73 | |
parent | 2fe1666c590d98298e2b57b079d47394e74a9bca (diff) | |
download | couchdb-377a3d3903bf2166f5e4b95d90f0a237672b812e.tar.gz |
Refactor view index layout
This moves index meta information to its own key space so that we can
scan all existing indexes efficiently.
-rw-r--r-- | src/couch_views/include/couch_views.hrl | 16 | ||||
-rw-r--r-- | src/couch_views/src/couch_views_fdb.erl | 23 |
2 files changed, 25 insertions, 14 deletions
diff --git a/src/couch_views/include/couch_views.hrl b/src/couch_views/include/couch_views.hrl index 642431dfe..c40bb0212 100644 --- a/src/couch_views/include/couch_views.hrl +++ b/src/couch_views/include/couch_views.hrl @@ -10,14 +10,18 @@ % License for the specific language governing permissions and limitations under % the License. -% indexing +% Index info/data subspaces +-define(VIEW_INFO, 0). +-define(VIEW_DATA, 1). + +% Index info keys -define(VIEW_UPDATE_SEQ, 0). --define(VIEW_ID_INFO, 1). --define(VIEW_ID_RANGE, 2). --define(VIEW_MAP_RANGE, 3). +-define(VIEW_ROW_COUNT, 1). +-define(VIEW_KV_SIZE, 2). --define(VIEW_ROW_COUNT, 0). --define(VIEW_KV_SIZE, 1). +% Data keys +-define(VIEW_ID_RANGE, 0). +-define(VIEW_MAP_RANGE, 1). % jobs api -define(INDEX_JOB_TYPE, <<"views">>). diff --git a/src/couch_views/src/couch_views_fdb.erl b/src/couch_views/src/couch_views_fdb.erl index f68dafc41..f2ac01bf3 100644 --- a/src/couch_views/src/couch_views_fdb.erl +++ b/src/couch_views/src/couch_views_fdb.erl @@ -249,7 +249,7 @@ get_view_keys(TxDb, Sig, DocId) -> } = TxDb, {Start, End} = id_idx_range(DbPrefix, Sig, DocId), lists:map(fun({K, V}) -> - {?DB_VIEWS, Sig, ?VIEW_ID_RANGE, DocId, ViewId} = + {?DB_VIEWS, ?VIEW_DATA, Sig, ?VIEW_ID_RANGE, DocId, ViewId} = erlfdb_tuple:unpack(K, DbPrefix), [TotalKeys, TotalSize, UniqueKeys] = couch_views_encoding:decode(V), {ViewId, TotalKeys, TotalSize, UniqueKeys} @@ -283,17 +283,17 @@ update_kv_size(TxDb, Sig, ViewId, Increment) -> seq_key(DbPrefix, Sig) -> - Key = {?DB_VIEWS, Sig, ?VIEW_UPDATE_SEQ}, + Key = {?DB_VIEWS, ?VIEW_INFO, ?VIEW_UPDATE_SEQ, Sig}, erlfdb_tuple:pack(Key, DbPrefix). row_count_key(DbPrefix, Sig, ViewId) -> - Key = {?DB_VIEWS, Sig, ?VIEW_ID_INFO, ViewId, ?VIEW_ROW_COUNT}, + Key = {?DB_VIEWS, ?VIEW_INFO, ?VIEW_ROW_COUNT, Sig, ViewId}, erlfdb_tuple:pack(Key, DbPrefix). kv_size_key(DbPrefix, Sig, ViewId) -> - Key = {?DB_VIEWS, Sig, ?VIEW_ID_INFO, ViewId, ?VIEW_KV_SIZE}, + Key = {?DB_VIEWS, ?VIEW_INFO, ?VIEW_KV_SIZE, Sig, ViewId}, erlfdb_tuple:pack(Key, DbPrefix). @@ -303,17 +303,17 @@ db_kv_size_key(DbPrefix) -> id_idx_key(DbPrefix, Sig, DocId, ViewId) -> - Key = {?DB_VIEWS, Sig, ?VIEW_ID_RANGE, DocId, ViewId}, + Key = {?DB_VIEWS, ?VIEW_DATA, Sig, ?VIEW_ID_RANGE, DocId, ViewId}, erlfdb_tuple:pack(Key, DbPrefix). id_idx_range(DbPrefix, Sig, DocId) -> - Key = {?DB_VIEWS, Sig, ?VIEW_ID_RANGE, DocId}, + Key = {?DB_VIEWS, ?VIEW_DATA, Sig, ?VIEW_ID_RANGE, DocId}, erlfdb_tuple:range(Key, DbPrefix). map_idx_prefix(DbPrefix, Sig, ViewId) -> - Key = {?DB_VIEWS, Sig, ?VIEW_MAP_RANGE, ViewId}, + Key = {?DB_VIEWS, ?VIEW_DATA, Sig, ?VIEW_MAP_RANGE, ViewId}, erlfdb_tuple:pack(Key, DbPrefix). @@ -324,7 +324,14 @@ map_idx_key(MapIdxPrefix, MapKey, DupeId) -> map_idx_range(DbPrefix, Sig, ViewId, MapKey, DocId) -> Encoded = couch_views_encoding:encode(MapKey, key), - Key = {?DB_VIEWS, Sig, ?VIEW_MAP_RANGE, ViewId, {Encoded, DocId}}, + Key = { + ?DB_VIEWS, + ?VIEW_DATA, + Sig, + ?VIEW_MAP_RANGE, + ViewId, + {Encoded, DocId} + }, erlfdb_tuple:range(Key, DbPrefix). |