This is an automated email from the ASF dual-hosted git repository. davisp pushed a commit to branch prototype/fdb-layer in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 377a3d3903bf2166f5e4b95d90f0a237672b812e Author: Paul J. Davis <[email protected]> AuthorDate: Mon Mar 2 13:39:00 2020 -0600 Refactor view index layout This moves index meta information to its own key space so that we can scan all existing indexes efficiently. --- src/couch_views/include/couch_views.hrl | 16 ++++++++++------ 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 642431d..c40bb02 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 f68dafc..f2ac01b 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).
