Pergunta

Eu estou usando SqlServer para dirigir um aplicativo WPF, Atualmente estou usando o NHibernate e pré-ler todos os dados por isso é armazenado em cache por motivos de desempenho. Que funciona para um aplicativo único cliente, mas eu queria saber se há um banco de dados em memória que eu poderia usar para que eu possa compartilhar as informações em vários aplicativos na mesma máquina. Idealmente, isso seria sentar-se abaixo minha stack NHibernate, assim que meu código não teria que mudar. Efetivamente eu estou olhando para mover o meu DB a partir de seu formato tradicional no servidor para ser um na memória DB no cliente.

Note que eu só precisa selecionar funcionalidade.

Foi útil?

Solução

http://www.db4o.com/ pode ser seu amigo!

Outras dicas

eu estaria incrivelmente surpreendido se você ainda precisa carregar todas as suas informações na memória. Digo isto porque, apenas como um exemplo, eu estou trabalhando em um aplicativo Web no momento em que (por várias razões) carrega milhares de registros em muitas páginas. Esta é PHP + MySQL. E mesmo assim ele pode fazê-lo e processar uma página em bem menos de 100ms.

Antes de ir por esse caminho se certificar que você tem que. Primeiro faça o seu banco de dados como performance possível. Agora, obviamente, isso inclui coisas como ter índices apropriados e ajustar seu banco de dados, mas mesmo que está colocando o cavalo antes da carroça.

Em primeiro lugar você precisa ter certeza de que você tem um bom relacional modelo de dados: um que se presta a consultas de elevada performance. Esta é tanta arte como de ciência.

Além disso, você pode gostar NHibernate mas nem sempre são a melhor escolha. Existem alguns casos de canto, por exemplo, que o SQL mão-codificado será muito superior em.

Agora, supondo que você tem um bom modelo de dados e supondo que você tenha, em seguida, otimizado seus índices e parâmetros de banco de dados e, em seguida, você já devidamente configurado NHibernate, então e só então você deve considerar o armazenamento de dados na memória se e somente se desempenho ainda é um problema .

Para colocar isso em perspectiva, as únicas vezes que eu precisava fazer isso são os sistemas que precisam executar milhões de transações por dia.

Uma das razões para evitar o cache em memória é porque ele adiciona um monte de complexidade. Você tem que lidar com questões como a validade cache, atualizações independentes para o armazenamento de dados subjacente, se você usar atualizações síncronas e assíncronas, como você dar ao cliente um consistente (se não for up-to-date) vista de seus dados, como você lida com failover e replicação e assim por diante. Há um custo enorme complexidade a ser pago.

Assumindo que você tenha feito tudo o exposto, e você ainda precisa dele, ele parece-me que o que você precisa é uma solução de cache ou grade. Aqui está um visão geral da rede de Java / soluções de cluster mas muitos deles (por exemplo, Coerência, memcached) aplicam-se a Net também. Outra opção para a Net é Velocity .

Ele precisa ser apontado e ressaltou que algo como NHibernate só é consistente tanto tempo como nada atualiza externamente o banco de dados e que não é exatamente um processo NHibernate habilitado (com exceção de soluções de cluster). Se dois aplicativos de desktop em dois PCs diferentes são ambos atualizar o mesmo banco de dados com NHibernate o cache simplesmente não vai funcionar porque a unidades de persistência simplesmente não vai estar ciente das mudanças que a outra está fazendo.

Velocity é um fora de servidor de cache de objeto de processo projetados pela Microsoft para fazer praticamente o que quiser embora seja apenas na forma CTP no momento.

Eu acredito que há também invólucros para memcached, que também podem ser usados ??para objetos de cache.

Você pode usar HANA, Express Edition. Você pode baixá-lo gratuitamente , é na memória, colunar e permite capacidades adicionais de análise, tais como análise de texto, geoespaciais ou preditiva. Você também pode acesso com ODBC, JDBC, Node.js biblioteca hdb, APIs de REST entre outros.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top