MemoryMappedFile y b-tree para la aplicación de caché

Esto es solo una idea, todavía no tengo ningún código, necesito algunos consejos de diseño. Implementaría un caché (no distribuido en primera instancia) utilizando el MemoryMappedFile en c #. Creo que sería bueno tener un B-tree como una estructura que no se mueve, pero esto también es discutible. Así que la pregunta es:

  • ¿Es B-tree una buena estrategia para usar en la búsqueda rápida de elementos cuando el soporte de retardo es un archivo asignado en memoria?
  • ¿Qué consejo y truco tenemos con los archivos asignados en memoria? ¿Cuánto puede ser grande la vista, cuáles son los inconvenientes cuando es demasiado pequeña o demasiado grande?
  • Consideración multihilo: ¿cómo tratamos el archivo mapeado de memoria y la concurrencia? Se supone que el caché está muy afectado por los clientes, ¿qué estrategia es mejor tener algo que funcione?

Como @Internal Server Error preguntó, integro la pregunta con esto: La clave sería una cadena, aproximadamente 64 caracteres como máximo. Los datos serían un byte [] de aproximadamente 1024 bytes de longitud pero consideramos un promedio de 128 bytes, o mejor: lo que quiero almacenar en caché son entidades OR/M, consideremos cuánto tiempo es una entidad serializada en bytes con algo como un serializador BSOn .

1
La clave será una cadena, considere algo sobre 64 caracteres. Los datos pueden ser una matriz de bytes: una entidad serializada, probablemente de 4 a 1k byte.
agregado el autor Felice Pollano, fuente
@sehe tienes razón, lo sé mongodb, pero quiero algo que se pueda incrustar en mi proyecto
agregado el autor Felice Pollano, fuente
¿Por qué rodar el tuyo? couchdb, memcached, mongodb; aparentemente mongodb es rápido
agregado el autor sehe, fuente
¿Cuál es el tipo (s) de datos que está almacenando en caché? ¿De qué tipo es la clave? ¿De cuántos datos estamos hablando?
agregado el autor 500 - Internal Server Error, fuente

1 Respuestas

  • B-Tree es bueno (con archivos asignados en memoria), pero si el archivo no siempre se guarda completamente en la memoria residente, entonces un B + Tree alineado con la página es mucho mejor. Consulte también .
  • El truco con los archivos asignados en memoria es usar una arquitectura de 64 bits para poder asignar todo el archivo a la memoria, de lo contrario, solo tendría que asignar las partes y el leído s podría ser más rápido que mmap s.
  • Pruebe CAS (comparar y cambiar) en la memoria compartida. Consulte también .
1
agregado
Muchas gracias, buenas referencias también.
agregado el autor Felice Pollano, fuente
Tal vez haya algo C# -pish para usted en nosql-database.org . O algún proyecto de C puede servir como referencia.
agregado el autor ArtemGr, fuente