Com a recente versão de desenvolvedor de março de 2017 do Couchbase, houve muitas correções de bugs, mas também aprimoramentos de recursos para tecnologias essenciais como o N1QL. Por exemplo, agora os índices podem ser criados em várias meta-informações, como os valores de cas e expiração do documento. Outro exemplo inclui uma sintaxe simplificada ao criar índices de matriz.
Vamos dar uma olhada em alguns desses aprimoramentos e como você pode usá-los em seu próprio aplicativo.
Indexação de matriz simplificada no Couchbase 5.0
Com o Couchbase Server 4.5, veio a indexação de matriz. Veja o seguinte documento de amostra, por exemplo:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "type": "pessoa", "firstname": "Nic", "Lastname": "Raboy", "social-media": [ { "type": "twitter", "url": "https://www.twitter.com/nraboy" }, { "tipo": "website", "url": "https://www.thepolyglotdeveloper.com" } ] } |
Nova sintaxe de índice de matriz
Antes do Couchbase 5.0, para indexar os elementos da matriz encontrados em mídia social você tinha que escrever um índice parecido com o seguinte:
|
1 2 3 |
CREATE INDEX ism ON `default` ( DISTINCT ARRAY media FOR media IN `social-media` END ) WHERE type = 'person'; |
No exemplo acima, o PARA era necessário para a indexação do array. No Couchbase Server 5.0, há uma sintaxe muito mais simplificada. O mesmo índice pode ser criado da seguinte forma:
|
1 2 3 |
CREATE INDEX ism ON `default` ( DISTINCT `social-media` ) WHERE type = "person"; |
Para garantir que seu índice funcione, você pode executar a seguinte consulta N1QL:
|
1 2 3 |
EXPLAIN SELECT * DO padrão WHERE type = 'person' AND ANY media IN `social-media` SATISFIES media.type = 'website' END; |
Ao examinar os resultados da EXPLICAR você verá que ele está usando o ismo que foi criado anteriormente.
O fato de a sintaxe simplificada existir não significa que você não possa usar a sintaxe anterior na indexação de matriz. O exemplo a seguir seria um exemplo perfeito de por que a sintaxe anterior ainda seria válida:
|
1 2 3 |
CREATE INDEX ism_website ON `default` ( DISTINCT ARRAY media FOR media IN `social-media` WHEN media.type = 'website' END ) WHERE type = 'person'; |
Observe que a QUANDO foi usado ao criar o operador ism_website índice acima.
Mais informações sobre indexação de matriz podem ser encontradas aquijuntamente com outra documentação útil sobre a criação de índices no Couchbase.
Requisito de correspondência de variável relaxada para índices de matriz
Nas versões 4.x, a indexação de matriz exigia o uso de nomes de variáveis exatamente iguais no SELECIONAR que foram usadas na consulta CRIAR ÍNDICE declaração. Veja mais detalhes aqui.
Por exemplo, referindo-se às consultas anteriores vistas acima, observe que a variável mídia que é usado para iterar pela matriz mídia social é muito importante. A indexação de matrizes na versão 4.x exige o nome exato da variável mídia a ser usado no SELECIONAR consulta.
A versão 5.0 do Couchbase relaxa esse requisito, e a consulta a seguir funcionaria perfeitamente bem:
|
1 2 3 4 |
EXPLAIN SELECT * DO padrão USE INDEX (ism) WHERE type = 'person' AND ANY m IN `social-media` SATISFIES m.type = 'website' END; |
Observe que o índice ismo usa o nome da variável mídiamas a consulta acima usa m. Ainda assim, a consulta acima pode usar o índice ismo com sucesso.
Um requisito de chave de índice de matriz inteira descontraído para índices de matriz
Lembre-se também de que, nas versões 4.x, a indexação de matriz coberta exige todo o atributo da matriz como uma chave de índice obrigatória na definição do índice da matriz. Por exemplo, veja novamente a consulta a seguir:
|
1 2 3 |
EXPLAIN SELECT * DO padrão WHERE type = 'person' AND ANY media IN `social-media` SATISFIES media.type = 'website' END; |
O índice da matriz coberta correspondente à consulta acima seria:
|
1 2 3 |
CREATE INDEX ism_covered ON `default` ( DISTINCT ARRAY media FOR media IN `social-media` END, `social-media`) WHERE type = 'person'; |
Observe que a segunda chave de índice mídia social é obrigatório, por exemplo, para cobrir a consulta a seguir:
|
1 2 3 |
EXPLAIN SELECT mídia DO padrão WHERE type = 'person' AND ANY media IN `social-media` SATISFIES media IS NOT NULL END; |
No Couchbase 5.0, essa mesma consulta será coberta pelo índice ismo no início deste artigo.
É importante observar que esse recurso traz muito poder aos índices de matriz. Porque, agora, cada entrada no índice de matriz consome menos espaço de armazenamento e memória. Ele permite os seguintes benefícios:
- Uso de índices de matriz cobertos para matrizes maiores
- Proporciona mais eficiência e desempenho às consultas que usam índices de matriz cobertos
Indexação de meta-informações de documentos
Vamos dar uma guinada e discutir as novas metainformações que podem ser indexadas. Anteriormente, os índices podiam ser criados na variável meta().id mas agora tanto a propriedade meta().cas e meta().expiração são compatíveis.
Então, como criamos um índice que usa as metapropriedades como chaves? Não é muito diferente do que você já sabe. Veja os seguintes índices de cobertura, por exemplo:
|
1 2 3 4 5 |
CREATE INDEX idx_cas ON `default` ( META().cas, META().expiration ) CREATE INDEX idx_exp ON `default` ( META().expiration ) |
Agora, se eu quisesse usar o idx_cas e idx_exp em uma consulta N1QL, eu poderia fazer algo como o seguinte:
|
1 2 3 4 5 6 7 |
SELECT META().id, META().cas DO padrão WHERE META().cas > 1489531586248179712; SELECT META().id, META().expiration DO padrão WHERE META().expiration > NOW_MILLIS(); |
Então, por que seria possível indexar essas propriedades? Bem, e se você quisesse fazer uma consulta de todos os documentos que expiraram hoje ou de todos os documentos que foram modificados hoje?
Para obter mais informações sobre o CAS e as propriedades de expiração, acesse aqui. Para obter mais informações sobre a indexação ou o uso do N1QL com o Couchbase, consulte a seção Portal do desenvolvedor do Couchbase.
[...] Aprimoramentos de recursos do N1QL no Couchbase Server 5.0 March Developer Build [...]