Como o Couchbase continua a crescer como empresa e a ser adotado pela comunidade de código aberto, continuamos a encontrar novos desafios e casos de uso ao longo do caminho. Muitas empresas estão recorrendo a nós para ajudar a adicionar um cache a um aplicativo existente ou a evoluir aplicativos para tecnologias de próxima geração. Para essas implementações de cache de nível dois, ajudamos a desenvolver uma camada de acesso a dados para aplicativos no projeto Spring. O Spring Data Couchbase oferece integração com o cluster do Couchbase Server, fornecendo interação de dados centrada em POJO com Couchbase Buckets e ajudando a fornecer uma implementação no estilo de repositório. Esse esforço foi muito bem-sucedido e gerou muito interesse.
No entanto, uma simples pesquisa na Web por "JPA" revela mais do que isso, o que nos ajuda a entender outras necessidades em toda a empresa. Embora o padrão JPA seja bem definido Por fim, a implementação de cada fornecedor varia o suficiente para que o suporte a ORMs específicos, como Eclipselink e Hibernate, exija trabalho adicional. Envolvemos nossos parceiros da Tecnologia Thumbtack que implantou uma de suas equipes especializadas em desenvolvimento NOSQL para ajudar a obter o trabalho realizado.
O objetivo era fornecer uma estrutura de código boilerplate para aproveitar o Couchbase como um cache de nível dois para o Eclipselink e o Hibernate. Há aprimoramentos a serem feitos com o lançamento de nossos SDKs 2.0 e outros aprimoramentos de integração, mas queríamos poder dar suporte a esses esforços de cache no curto prazo. Ambos os conectores JPA do Hibernate e do Eclipselink foram publicados pela Thumbtack no github com casos de teste para mostrar a configuração.
Hibernar - https://github.com/thumbtack-technology/Couchbase-L2-Hibernate
EclipseLink - https://github.com/thumbtack-technology/Couchbase-L2-EclipseLink
Embora sempre exista a possibilidade de alavancar Moxi para permitir que os clientes memcached existentes sejam sensíveis ao vbubket. Sabíamos que o pacote javax.persistance tinha um interface de cache disponível mas cada implementação de fornecedor requer nuances que precisam ser abordadas. Por exemplo, ao revisar os Documentação do eclipselink mostra a capacidade de adicionar um cache de nível 2, mas nada que nos ajude a entender as especificidades do aproveitamento de uma solução NoSQL. A Thumbtack nos ajudou a resolver esses desafios de configuração.
<propriedade nome="couchbase.cache.servers"
valor="https://couchbase-cluster-node01:8091/pools,
https://couchbase-cluster-node02:8091/pools”/>
<propriedade nome="couchbase.cache.bucket.name" valor="l2-cache"/>
<propriedade nome="couchbase.cache.bucket.password" valor="cachepwd"/>
<propriedade nome="couchbase.cache.ttl" valor=“600”/>
<propriedade nome="eclipselink.descriptor.customizer.”
value="net.thumbtack.couchbase.eclipselink.ClassCustomizer"/>
>
<propriedade nome="eclipselink.descriptor.customizer.Order"
valor="net.thumbtack.couchbase.eclipselink.ClassCustomizer"/>
>
<propriedade nome="eclipselink.descriptor.customizer.”
value="net.thumbtack.couchbase.eclipselink.ClassCustomizer"/>
<propriedade nome="couchbase.cache.servers"
valor="https://couchbase-cluster-node01:8091/pools,
https://couchbase-cluster-node02:8091/pools”/>
<propriedade nome="couchbase.cache.bucket.name" valor="l2-cache"/>
<propriedade nome="couchbase.cache.bucket.password" valor="cachepwd"/>
<propriedade nome="couchbase.cache.ttl" valor=“600”/>
<propriedade nome="hibernate.cache.region.factory_class" valor="com.googlecode.hibernate.memcached.MemcachedRegionFactory" />
<propriedade nome="hibernate.memcached.memcacheClientFactory" valor="net.thumbtack.hibernate.couchbase.CouchbaseClientFactory" />
Detalhes adicionais sobre como fazer com que os casos de teste do Thumbtack sejam executados localmente podem ser encontrados nos repositórios do github.
Esses conectores nos permitem ampliar os aplicativos existentes adicionando um cache de objetos com um cluster durável. Aproveitando o poder do Couchbase, podemos evitar o Cold Cache, reduzir drasticamente a carga no seu RDBMS, fazer o auto-shard no cluster e fornecer um armazenamento de objetos durável.