Pregunta

Estoy usando SqlServer para manejar una aplicación WPF, actualmente estoy usando NHibernate y leí todos los datos para que se almacene en caché por razones de rendimiento. Eso funciona para una aplicación de un solo cliente, pero me preguntaba si podría usar una base de datos en la memoria para poder compartir la información de varias aplicaciones en la misma máquina. Idealmente, esto se ubicaría debajo de mi pila NHibernate, de modo que mi código no tendría que cambiar. De hecho, estoy buscando mover mi base de datos de su formato tradicional en el servidor para que sea un DB de memoria en el cliente.

Nota: solo necesito seleccionar la funcionalidad.

¿Fue útil?

Solución

http://www.db4o.com/ puede ser tu amigo

Otros consejos

Me sorprendería muchísimo si incluso necesitaras cargar toda tu información en la memoria. Digo esto porque, solo como un ejemplo, estoy trabajando en una aplicación web en el momento en que (por varias razones) se cargan miles de registros en muchas páginas. Esto es PHP + MySQL. Y aun así puede hacerlo y renderizar una página en menos de 100 ms.

Antes de ir por esta ruta, asegúrese de que tiene que hacerlo. Primero haz tu base de datos lo más performativa posible. Ahora, obviamente, esto incluye cosas como tener índices apropiados y afinar su base de datos, pero a pesar de que están poniendo el caballo antes que el carro.

Lo primero y más importante es asegurarse de tener un buen modelo de datos relacionales: uno que se preste a las consultas de rendimiento. Esto es tanto arte como ciencia.

Además, puede que te guste NHibernate pero Los ORM no siempre son los mejores elección . Hay algunos casos de esquina, por ejemplo, que el código SQL codificado a mano será muy superior en.

Ahora suponiendo que tiene un buen modelo de datos y asumiendo que ha optimizado sus índices y parámetros de base de datos y luego ha configurado correctamente NHibernate, entonces y solo entonces debería considerar almacenar datos en la memoria si y solo si el rendimiento sigue siendo un problema .

Para poner esto en perspectiva, las únicas veces que he necesitado hacer esto son los sistemas que necesitan realizar millones de transacciones por día.

Una razón para evitar el almacenamiento en memoria caché es porque agrega mucha complejidad. Tiene que lidiar con problemas como la caducidad de la caché, las actualizaciones independientes del almacén de datos subyacente, si usa actualizaciones síncronas o asíncronas, cómo otorga al cliente una vista coherente (si no está actualizada) de sus datos, cómo trata Con failover y replicación y así sucesivamente. Hay un enorme costo de complejidad por pagar.

Suponiendo que haya hecho todo lo anterior y todavía lo necesite, me parece que lo que necesita es una solución de caché o cuadrícula. Aquí hay un descripción general de las soluciones de cuadrícula / clúster de Java pero muchas de ellas (p. ej., Coherence, memcached) también se aplican a .Net. Otra opción para .Net es Velocidades .

Es necesario señalar y enfatizar que algo como NHibernate solo es consistente siempre que nada actualice la base de datos externamente y que exista exactamente un proceso habilitado para NHibernate (excepto soluciones agrupadas). Si dos aplicaciones de escritorio en dos PC diferentes están actualizando la misma base de datos con NHibernate, el almacenamiento en caché simplemente no funcionará porque las unidades de persistencia simplemente no serán conscientes de los cambios que está realizando la otra.

Velocity es un servidor de almacenamiento en caché de objetos fuera de proceso diseñado por Microsoft para hacer casi lo que quieras aunque solo está en formato CTP en este momento.

Creo que también hay envoltorios para memcached, que también se pueden usar para almacenar objetos en caché.

Puedes usar HANA, edición express. Puede descargarlo gratis , está en la memoria, Columnar y permite capacidades de análisis adicionales tales como análisis de texto, geoespacial o predictivo. También puede acceder con ODBC, JDBC, node.js hdb library, API REST entre otras.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top