Observação: esta é uma postagem de convidado de Mike Howard, da Simba Technologies.

N1QL DML

O suporte à manipulação de dados N1QL facilita a inserção, atualização e exclusão de dados JSON, sem a sobrecarga de ter que ler o documento primeiro. Essas instruções N1QL podem executar uma operação em um bucket inteiro com uma única solicitação de rede. As consultas N1QL não são vinculadas ao esquema e, portanto, podem ser usadas para manipular dados fora das restrições do esquema. Além disso, as consultas N1QL não são restritas a uma única tabela e são perfeitas para manipular dados em várias tabelas simultaneamente. O driver Simba Couchbase permite que você execute essas consultas diretamente por meio do driver.

INSERIR

O N1QL INSERT permite a inserção de um novo documento JSON. Embora esse método possa ser usado para a simples tarefa de adicionar uma linha a uma tabela existente, ele é particularmente útil ao adicionar dados que não correspondem a um esquema existente. A capacidade de adicionar dados não relacionados ao esquema permite que você manipule o esquema: Adicione um documento de tipo existente com novos atributos ou adicione um documento de novo tipo para criar novas tabelas. E você obterá novas colunas no esquema. No entanto, você terá de fazer uma nova amostragem do banco de dados (usando SQL) para visualizar qualquer novo dado não relacionado ao esquema.

Usando o bucket gamesim-sample como exemplo, digamos que queremos adicionar um recurso "Bosses" ao nosso jogo. Use um INSERT N1QL para criar uma tabela Bosses, adicionando um novo documento do tipo "boss":

INSERT INTO gamesim-sample (KEY, VALUE) VALUES ("Blue Dragon", {"type": "boss", "hitpoints": 70000})

Refaça a amostragem com o driver para criar uma nova tabela de chefes com essas informações. Se optarmos por estender nossa tabela de chefes para incluir pontos de experiência semelhantes aos da tabela de monstros, poderemos usar o N1QL INSERT para inserir novos documentos em uma tabela existente que não corresponda ao esquema atual da tabela:

INSERT INTO gamesim-sample (KEY, VALUE) VALUES ("Golden Griffin", {"type": "boss", "hitpoints": 80000, "experienceWhenKilled": 37000})

Como no primeiro caso acima, essa alteração de esquema não entrará em vigor até que a tabela seja reamostrada. Entretanto, quaisquer valores que correspondam ao esquema existente ainda estarão disponíveis:

Tabela de chefes após INSERT antes da reamostragem

PK pontos de vida
Dragão azul 70000
Grifo dourado 80000

Tabela de chefes após a reamostragem

PK pontos de vida experienceWhenKilled (experiência quando morto)
Dragão azul 70000 NULL
Grifo dourado 80000 37000

ATUALIZAÇÃO

Você pode usar o N1QL UPDATE para modificar diretamente os documentos JSON. Assim como o SQL UPDATE, essa operação pode ser usada para modificar atributos individuais em uma tabela; no entanto, o verdadeiro poder do UPDATE vem de seu escopo em todo o bucket. Usando o N1QL UPDATE, você pode modificar todos os documentos correspondentes no bucket por meio de uma única consulta, em uma única solicitação de rede, sem precisar ler todos os dados primeiro.

Aqui está um exemplo de cenário: Atualizar um videogame para aumentar os pontos de vida de todos os jogadores e monstros em um multiplicador fixo. Normalmente, isso exigiria duas consultas: uma para atualizar os jogadores e outra para os monstros:

Tabela de jogadores antes do UPDATE

PK pontos de vida
Aaron0 20210
Aaron1 23832
Aaron2 10
Aliaksey0 10

Tabela de monstros antes do UPDATE

PK pontos de vida
Bauchan0 3754
Bauchan1 3627
Bauchan2 4999
Bauchan3 4699
Bauchan4 3070

Porém, com o N1QL, podemos emitir uma única atualização de todo o bucket para concluir essa tarefa:

ATUALIZAÇÃO gamesim-sample SET hitpoints = hitpoints*2

Essa consulta duplica o valor de cada atributo de pontos de acesso no bucket em uma única operação.

Tabela de jogadores após o UPDATE

PK pontos de vida
Aaron0 40420
Aaron1 47664
Aaron2 20
Aliaksey0 20

Tabela de monstros após a atualização

PK pontos de vida
Bauchan0 7508
Bauchan1 7254
Bauchan2 9998
Bauchan3 9398
Bauchan4 6140

DELETE

O N1QL delete remove todos os documentos do bucket que correspondem a uma condição especificada. Isso pode ser útil para realizar exclusões em lote. Um exemplo de operação poderia ser a remoção de uma cervejaria no bucket de amostras de cerveja. Para remover uma cervejaria e todas as cervejas associado com ele, poderíamos emitir a seguinte consulta:

DELETE FROM amostra de cerveja WHERE name = "21st Amendment Brewery Cafe" OR brewery_id = "21st_amendment_brewery_cafe"

Isso remove todos os dados relacionados ao "21st Amendment Brewery Cafe" no bucket em uma única operação. Usando SQL, isso exigiria três consultas: uma para remover a cervejaria da tabela brewery, uma segunda para remover o endereço da tabela brewery_address e uma terceira para remover as cervejas associadas à cervejaria da tabela beer.

SQL DML

O Simba Couchbase Driver também permite que você manipule tabelas usando a sintaxe SQL. Você pode conectar o Couchbase Driver via ODBC ou JDBC a ferramentas de gravação baseadas em SQL, como aplicativos ETL. Ele também permite que você emita mais facilmente consultas com escopo no nível da tabela.

INSERIR

O SQL INSERT adiciona um documento a um intervalo que corresponde ao esquema da tabela à qual ele está sendo adicionado. Ao contrário do N1QL, o SQL INSERT aplicará ativamente o esquema definido no mapa do esquema. Para executar operações de inserção que se destinam a corresponder ao esquema atual, o SQL INSERT é preferível, pois evita a modificação acidental do esquema.

Para continuar o exemplo da tabela de chefes, vamos adicionar um novo chefe à tabela. Para começar, emitimos o comando SQL:

INSERT INTO 'gamesim-sample'.boss (PK, hitpoints, experienceWhenKilled) VALUES ("Grey Wolf", 22000, 12000)

Isso adiciona a linha Wolf à tabela Boss. Observe como o atributo type não precisa ser especificado, pois está implícito no nome da tabela:

Tabela principal após o SQL INSERT

PK Pontos de vida experienceWhenKilled (experiência quando morto)
Dragão azul 70000 NULL
Grifo dourado 80000 37000
Lobo cinza 22000 12000

ATUALIZAÇÃO

O SQL UPDATE permite que você atualize uma única tabela. Isso é útil se você quiser restringir o escopo da atualização a essa única tabela. Para atualizações de tabelas específicas, o SQL UPDATE é preferível ao N1QL, pois seu escopo restrito evita a modificação não intencional de outros documentos.

Por exemplo, imagine se quiséssemos aumentar os pontos de vida dos monstros. Podemos fazer isso emitindo o comando SQL UPDATE:

UPDATE 'gamesim-sample'.monster SET hitpoints=hitpoints*1.5

Isso atualiza apenas os pontos de vida dos monstros, deixando a tabela do jogador intocada.

Tabela de monstros após a atualização

PK pontos de vida
Bauchan0 5631
Bauchan1 5440
Bauchan2 7498
Bauchan3 7048
Bauchan4 4605

DELETE

O SQL DELETE exclui uma única linha de uma tabela. Semelhante ao SQL UPDATE, isso é útil para limitar a operação a uma única tabela. Semelhante ao insert e atualização, o SQL DELETE é a operação preferida para remover documentos de uma única tabela, pois evita a remoção acidental de outro documento.

Por exemplo, podemos excluir todos os jogadores com menos de 100 pontos de vida. Emitimos o comando SQL DELETE:

DELETE FROM 'gamesim-sample'.player WHERE hitpoints < 100

Isso remove todos os jogadores que têm menos de 100 pontos de vida, mas deixa os monstros intactos.

Resumo: manipulação de dados N1QL/SQL flexível em nível de bucket ou de tabela

O driver Simba Couchbase oferece aos usuários a flexibilidade de manipular seus dados no nível do bucket ou da tabela usando N1QL ou SQL. O uso do N1QL permite executar operações em todo o bucket, como manipulação de esquema, atualizações em massa ou exclusões em massa em uma única operação. O uso do SQL lhe dá acesso às ferramentas tradicionais de ETL, bem como à manipulação de dados em nível de tabela. Você pode fazer o download e experimentar os drivers da simba em http://www.simba.com/drivers/couchbase-odbc-jdbc/.

Autor

Postado por Don Pinto, gerente principal de produtos da Couchbase

Don Pinto é gerente de produto principal da Couchbase e atualmente está concentrado no avanço dos recursos do Couchbase Server. Ele é extremamente apaixonado por tecnologia de dados e, no passado, foi autor de vários artigos sobre o Couchbase Server, incluindo blogs técnicos e white papers. Antes de ingressar no Couchbase, Don passou vários anos na IBM, onde ocupou a função de desenvolvedor de software no grupo de gerenciamento de informações DB2 e, mais recentemente, como gerente de programa na equipe do SQL Server na Microsoft. Don tem mestrado em ciência da computação e é bacharel em engenharia da computação pela Universidade de Toronto, no Canadá.

Deixar uma resposta