summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul J. Davis <paul.joseph.davis@gmail.com>2020-03-02 13:39:00 -0600
committerPaul J. Davis <paul.joseph.davis@gmail.com>2020-03-05 14:18:12 -0600
commit377a3d3903bf2166f5e4b95d90f0a237672b812e (patch)
treefd5f1436b426746fe41211f65c2a90dfc764ad73
parent2fe1666c590d98298e2b57b079d47394e74a9bca (diff)
downloadcouchdb-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.hrl16
-rw-r--r--src/couch_views/src/couch_views_fdb.erl23
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).