MemoryMappedFile e b-tree para o aplicativo de cache

Esta é apenas uma ideia, eu ainda não tenho nenhum código, preciso de algum conselho de design. Eu iria implementar um cache (não distribuído em primeira instância) usando o MemoryMappedFile em c #. Eu acho que seria bom ter uma b-tree como uma estrutura undelying, mas isso é discutível também. Então a questão é:

  • A B-tree é uma boa estratégia para usar para pesquisar itens rapidamente quando o suporte de undelaying é um arquivo mapeado na memória?
  • Qual dica e truque nós temos com arquivos mapeados na memória? Quanto a vista pode ser grande, quais são as desvantagens quando ela é pequena ou grande demais?
  • Consideração multithread: como lidamos com arquivos mapeados de memória e simultaneidade? Cache deve ser altamente atingido pelos clientes, qual estratégia é melhor para ter algo de desempenho?

Como @Internal Server Error, eu integrei a questão com isto: Key seria uma string, cerca de 64 caracteres max len. Os dados seriam um byte [] com cerca de 1024 bytes, mas considere uma média de 128 bytes, ou melhor: o que eu quero armazenar em cache são entidades OR/M, vamos considerar quanto tempo é uma entidade serializada em bytes com algo como um serializador BSOn .

1
chave será uma string, considere algo sobre 64 caracteres. Os dados podem ser uma matriz de bytes: uma entidade serializada, algo de 4 a 1k bytes provavelmente.
adicionado o autor Felice Pollano, fonte
@sehe você está certo, eu sei mongodb, mas eu quero algo embutido no meu projeto
adicionado o autor Felice Pollano, fonte
por que rolar o seu próprio couchdb, memcached, mongodb; aparentemente mongodb é rápido
adicionado o autor sehe, fonte
Qual é o (s) tipo (s) de dados que você está armazenando em cache? Qual tipo é a chave? Quantos dados estamos falando?
adicionado o autor 500 - Internal Server Error, fonte

1 Respostas

  • O B-Tree é bom (com arquivos mapeados na memória), mas se o arquivo não é sempre mantido inteiramente na memória residente, então uma Árvore B + alinhada à página é muito melhor. Veja também .
  • O truque com arquivos mapeados na memória é usar uma arquitetura de 64 bits para que você possa mapear o arquivo inteiro na memória, caso contrário você teria que mapear apenas as partes e o read armazenado em cache s pode ser mais rápido que mmap s.
  • Experimente o CAS (compare e alterne) sobre a memória compartilhada. Veja também .
1
adicionado
Muito obrigado, boas referências também.
adicionado o autor Felice Pollano, fonte
Talvez haja algo para você em nosql-database.org . Ou algum projeto em C pode servir como referência.
adicionado o autor ArtemGr, fonte