Для своих нужд я должен выполнить предварительное разбиение, но мой ключ шарда является составным ключом.оба ключа моего составного ключа (k1 и k2) имеют тип int, и моя желаемая структура чанка выглядит примерно так:
chunk1: k1 = minkey to 1, k2 = minkey to maxkey
chunk2: k1= От 1 до 2, k2 = от minkey до maxkey
chunk3: k1 = от 2 до 3, k2 = от minkey до maxkey
chunk4: k1 = от 3 до 4, k2 = от minkey до maxkey ...
Итак, что я действительно хочу сделать, так это разделить только первый ключ и оставить второй ключ, чтобы включить все возможные диапазоны, но если запустить этот
db.runCommand( { split : "db.mycollection" , middle : { k1: 1} } );
, произойдет сбой, говоря полныйключ шарда не предоставлен, поэтому он заставляет меня вызывать эту
db.runCommand( { split : "db.mycollection" , middle : { k1: 1, k2:somenumber } } );
эта команда работает, но результирующий сплит плох, потому что он дает мне куски, как показано ниже
chunk1: k1 = minkey to 1, k2 = minkey для somenumber
chunk2: k1 = 1 для maxkey, k2 = somenumber для maxkey
это плохо, потому что если пользователи вставляют что-то в документ, где k1 <1 и k2> somenumber,в системе, которая его закрывает, нет фрагмента, и вставка должна выйти из строя.
Как я могу создать такие границы чанков с помощью составного ключа?
ПРИМЕЧАНИЕ. Можно спросить, почему у меня k2, если это всегда minkey to maxkey.У меня есть k2, чтобы позволить дальнейшее разбиение на k2 для того же самого k1 в будущем, если это будет необходимо (и я уверен, что это понадобится для некоторых кусков)