database - recomendaciones - Recomendación para una base de datos en memoria
porque se dañan las tablas en mysql (8)
El almacenamiento de clave-valor en memoria más simple y más utilizado es MemcacheD . La página de introducción reitera lo que está solicitando:
Memcached es un almacén de valores-clave en memoria para pequeños fragmentos de datos arbitrarios (cadenas, objetos) a partir de resultados de llamadas a bases de datos, llamadas a API o representación de páginas.
La lista de clientes es impresionante. Ha sido por un largo tiempo. Buena documentación. Tiene API para casi todos los lenguajes de programación. La escala horizontal es bastante simple. Según mi experiencia, Memcached es bueno.
Es posible que también desee buscar en MemBase .
Me gustaría eliminar la dependencia de sql de pequeños fragmentos de datos que cargué en (casi) cada solicitud en una aplicación web. La mayoría de los datos son de valor clave / documento estructurado, pero no se excluye una solución relacional. Los datos no son demasiado grandes, así que quiero mantenerlos en la memoria para una mayor disponibilidad.
¿Qué solución recomendarías?
No estoy seguro de que esto sea lo que estás buscando, pero debes buscar en un marco de almacenamiento en caché (algo que puede estar incluido en las herramientas que estás usando ahora). Con un patrón de repositorio, solicita los datos, allí verifica si los tiene en caché por clave. Yo no, lo traes de la base de datos, si lo haces, lo traes del caché.
Dependerá del tipo de datos que maneje, por lo que depende de usted decidir durante cuánto tiempo mantener los datos en el caché. Quizás un tiempo límite de deslizamiento es mejor ya que conservará los datos siempre que la clave siga siendo solicitada. Lo que significa que si la memoria caché tiene datos para un usuario, una vez que el usuario se va, los datos caducarán desde la memoria caché.
Si no le molesta el sql pero desea mantener el db en la memoria, le recomendamos echarle un vistazo a sqlite (consulte http://www.sqlite.org/inmemorydb.html ).
Si no desea el sql y realmente solo tiene pares clave-valor, ¿por qué no simplemente almacenarlos en un mapa / hash / matriz asociativa y terminar con ellos?
Si termina necesitando una base de datos en memoria, H2 es una muy buena opción.
Redis es perfecto para este tipo de datos. También es compatible con algunas estructuras de datos fundamentales y proporciona operaciones sobre ellas.
Recientemente convertí mi aplicación de foro de Django para usarla en todos los datos de seguimiento / en tiempo real, es tan bueno que ya no tengo la sensación desagradable que tienes cuando haces este tipo de cosas ( SET views = views + 1
y otras escrituras en cada vista de página) con una base de datos relacional.
A continuación se muestra un ejemplo del uso de Redis para almacenar los datos necesarios para el seguimiento de la actividad del usuario, incluido el mantenimiento de un conjunto ordenado de usuarios vistos por última vez, en Python:
def seen_user(user, doing, item=None):
"""
Stores what a User was doing when they were last seen and updates
their last seen time in the active users sorted set.
"""
last_seen = int(time.mktime(datetime.datetime.now().timetuple()))
redis.zadd(ACTIVE_USERS, user.pk, last_seen)
redis.setnx(USER_USERNAME % user.pk, user.username)
redis.set(USER_LAST_SEEN % user.pk, last_seen)
if item:
doing = ''%s <a href="%s">%s</a>'' % (
doing, item.get_absolute_url(), escape(str(item)))
redis.set(USER_DOING % user.pk, doing)
Una base de datos más a considerar: Berkeley DB . Berkeley DB le permite configurar la base de datos para que esté en la memoria, en el disco o en ambos. Admite tanto una clave-valor (NoSQL) como una API SQL. Berkeley DB se usa a menudo en combinación con aplicaciones web porque está integrado, se implementa fácilmente (se implementa con su aplicación), es altamente configurable y muy confiable. Existen varios sitios web de e-Retail que dependen de Berkeley DB para sus aplicaciones de comercio electrónico, incluido Amazon.com.
¿Puedes copiar estos datos? ¿El patrón de acceso a los datos es simple y estable (no cambia con los requisitos comerciales cambiantes)? ¿Qué tan crítico es esta información (el contexto de la sesión, por ejemplo, no es demasiado difícil de restaurar, mientras que algunas preferencias que un usuario ha ingresado en una página de configuración no se deben perder)?
Normalmente, siempre que pueda fragmentar y sus patrones de acceso a datos sean simples y no muten demasiado, elija Redis. Si busca algo más confiable y admite patrones de acceso a datos más avanzados, Tarantool es una buena opción.
Por favor, mira esto:
Es una muy buena base de datos sin SQL con controladores y soporte para todos los idiomas principales.