Costumo usar o SQLite para criar programas simples em empresas. O banco de dados é colocado em um servidor de arquivos. Isso funciona bem, desde que não haja mais de 50 usuários trabalhando para o banco de dados ao mesmo tempo (embora sejam leituras ou gravações). Quando houver mais do que isso, eles perceberão uma lentidão se houver muita escrita simultânea no servidor, já que muito tempo é gasto em bloqueios e não há nada como um cache, pois não há servidor de banco de dados.
A vantagem de não precisar de um servidor de banco de dados é que o tempo para configurar algo como um Wiki da empresa ou similar pode ser reduzido de vários meses para apenas alguns dias. Geralmente, leva vários meses porque algum departamento de TI precisa solicitar o servidor e ele precisa estar em conformidade com as políticas e regras de segurança da empresa e precisa ser colocado na instalação de hospedagem do servidor terceirizado, que estraga e o coloca na localidade incorreta. etc etc.
Portanto, pensei em uma ideia para criar um servidor de banco de dados distribuído. O processo seria o seguinte: Um usuário em um computador da empresa edita algo em uma página do Wiki (que usa esse banco de dados como seu back-end), para fazer isso ele lê um arquivo no disco rígido local indicando o endereço IP do último computador desktop para ser um servidor de banco de dados. Ele então tenta contatar este computador diretamente via TCP / IP. Se ele não responder, ele lerá um arquivo no servidor de arquivos informando que o endereço IP do último computador de mesa é um servidor de banco de dados. Se este servidor também não responder, seu próprio computador de mesa se tornará o servidor de banco de dados e registrará seu endereço IP no mesmo arquivo. A instrução SQL update pode então ser executada e outros computadores desktop podem se conectar diretamente a ele.
O ponto com esta arquitetura é que, quanto maior a carga, melhor ela funcionará, já que cada computador desktop sempre saberá o endereço IP do servidor de banco de dados. Além disso, usando essa configuração, acredito que um banco de dados colocado em um servidor de arquivos pode servir centenas de computadores desktop em vez dos atuais 50 ou mais. Eu também não acredito que a carga no único computador desktop, que se tornou servidor de banco de dados, seja notada, já que não haverá operações de disco rígido nesta área de trabalho, apenas no servidor de arquivos.
Esta ideia é viável? Já existe? Que tipo de banco de dados pode suportar essa arquitetura?
Edite: devo salientar que essa idéia não é bonita, estável, é a melhor prática ou algo de que eu realmente me orgulhe. A razão pela qual ainda estou interessado na viabilidade é que alguns dos meus clientes são bancos, e a burocracia envolvida no acesso a um banco de dados é enorme. Muitas vezes, o patrocinador do projeto em tais projetos precisa estar acima do nível de vice-presidente, devido às suas preocupações extremas de segurança com o acesso aos servidores. Escusado será dizer que isto significa que há muito trabalho para criar um Wiki. Posteriormente, se o Wiki for bem-sucedido, ele deverá, é claro, ser migrado para um servidor de banco de dados adequado.
Edit2: O motivo para essa idéia é reduzir o risco de gravação do Starvation ao usar o SQLite quando o banco de dados é colocado no servidor de arquivos. Esse problema é descrito na seção 5.1 aqui . Utilizar um computador de mesa para armazenar em cache as informações mais acessadas (ou seja, páginas do Wiki) significaria que a carga de trabalho no servidor de arquivos seria reduzida drasticamente. Isso novamente deve melhorar a experiência do usuário. Você realmente acha que eu ainda estou longe dessa idéia?