O Couchbase Server 4 chegou!
e o SDK do Couchbase .NET facilita o uso!
O que há de novo?
- N1QL - agora você pode fazer consultas avançadas em seus documentos JSON no Couchbase
- XDCR filtrado - Nem todos os dados precisam ser copiados para um data center remoto.
- Segurança LDAP - acesso gerenciado mais fácil ao servidor Couchbase e aos eventos de registro.
- Eu mencionei o N1QL?
- e muitos outros recursos!
Faça o download e instale: Servidor Couchbase 4.0
N1QL - Consulta avançada
Um dos maiores recursos do Couchbase 4.0 é a opção de usar o N1QL para consultar seus documentos. A linguagem é baseada em SQL e acrescenta alguns recursos para ajudá-lo a trabalhar com documentos JSON desnormalizados.
|
1 2 3 |
SELECT * FROM bucket WHERE attribute1 = 'HELLO' AND attribute2 LIKE '%N1QL%' LIMIT 2 |
A consulta N1QL acima se parece exatamente com o SQL. A única diferença é que no N1QL não estamos selecionando de um bucket, mas de uma tabela, mas isso é implementação, não sintaxe. Escrever consultas N1QL geralmente é igual a escrever suas consultas SQL normais.
N1QL é mais do que SQL
O SQL foi criado para consultar dados estruturados com um esquema bem definido e tipos de dados bem definidos para cada coluna. O N1QL, por outro lado, destina-se à consulta de dados JSON com um esquema flexível, portanto, temos algumas opções extras no N1QL para nos ajudar a consultar esse modelo de dados flexível.
|
1 2 3 4 5 6 |
SELECT value1, value2, {'yes_this_is_valid': true} FROM bucket WHERE attribute1 = 'HELLO' AND attribute2 LIKE '%N!QL%' AND attribute3 IS NOT MISSING AND ANY item IN list_of.values SATISFIES item.count >= 5 END |
Ele ainda se parece com o SQL, mas agora adicionamos alguns operadores para nos ajudar a trabalhar com os dados JSON.
Deseja saber mais sobre o N1QL e o Couchbase Server?
O SDK do Couchbase .NET e o N1QL
O N1QL tem suporte de primeira classe no SDK do .NET e você ainda tem a opção de usar o N1QL com o LINQ. Vamos dar uma olhada em algumas das diferentes maneiras de usar o N1QL com o SDK do .NET.
|
1 2 3 4 5 6 7 8 9 |
string sql = "SELECT COUNT(*) FROM default WHERE type=$param1"; query = new QueryRequest(sql) .AddNamedParameter("param1", "..."); var result = ClusterHelper .GetBucket("travel-sample") .Query(query); return result.Rows; |
O snippet acima mostra como usar a API N1QL bruta, passando uma consulta e executando-a por meio de uma chamada para Query on the Bucket.
|
1 2 3 4 5 |
// Query Syntax var result = from myItem in ClusterHelper.GetBucket("bucket").Queryable() where myItem.Attribute1 == "...." select new { myValue = myItem.Attribute1} |
Mas você também pode usar a sintaxe de consulta com o LINQ. Ao usar o Language Integrated Query (LINQ), o .NET usa a reflexão para criar a string de consulta, no nosso caso, a string de consulta N1QL. Uma das principais vantagens do uso do LINQ em relação às consultas escritas à mão é a segurança de tipo, o recurso de autocompletar código e a verificação em tempo de compilação. Mas para obter a segurança de tipo, o LINQ precisa de uma classe que defina tanto o documento que consultamos (você pode pensar nisso como um esquema no código) quanto o resultado retornado. Essa pode ser a mesma classe, mas também pode ser duas classes diferentes, dependendo da consulta.
Nesse caso, "MyClass" é usado para autocompletar o código e criar a consulta N1QL, e um tipo anônimo é usado para manter o resultado.
|
1 2 3 4 5 6 |
// Lambda Syntax ClusterHelper .GetBucket("bucket") .Queryable() .Where(item => myItem.Attribute1 == "....") .Select(item => new { myValue = myItem.Attribute1 }; |
E, é claro, a Sintaxe Lambda também é uma opção.
Usando o N1QL e o SDK do .NET em seu próprio projeto
É tudo OpenSource, portanto, você sempre pode obter o código-fonte no GitHub:
Se você (como eu e a maioria dos outros desenvolvedores de .NET) preferir os pacotes Nuget, poderá encontrá-los aqui:
Introdução ao Couchbase Server 4 e ao .NET
O Try-cb-dotnet é uma das novas amostras que eu gostaria de destacar como um ótimo recurso para aprender e se familiarizar com o N1QL no .NET try-cb-dotnet
O Try-cb-dotnet está dividido em várias ramificações; cada ramificação representa uma etapa de um tutorial, o que deve facilitar o aprendizado do uso do N1QL em .net.