Bonjour,

J'ai commencé a programmer un logiciel mathématique de test de primalité de nombres particuliers:
les nombres de Mersenne (2^p-1).

Pour en fait réinventer la roue,
c'est a dire refaire un projet se rapprochant du projet GIMPS: www.mersenne.org

Ce mois d'aout, je n'ai pas envie de me plonger dans les algos mathématiques (FFT optimisée)
Je décide donc de voir comment je pourrais stocker mes nombres de Mersenne,
pour enregistrer l'avancée des tests qui seront effectué par mon programme.


Je pourrais très bien utilisé un moteur open-source (MariaDB, MySQL)

mais avec l'idée que la nature des données est très ... mathématique: des nombres en fait,
je pourrais créer un moteur moi même non dynamique, c'est a dire sans SQL, sans nommage de table et sans noms de champs.

- Si j’implémente des structures d'enregistrement fixe, j'aurais, je pense un gain de place assez important
- Si je me passe du SQL, et que j'implémente en dur mes requêtes en langage C++, j'aurais aussi un gain de rapidité
- L'idée de programmer un moteur léger et efficace c'est que je dois pouvoir mettre l'intégralité de la base en mémoire,
ce qui m'apporterait aussi un gain de rapidité.
- l'inconvénient c'est si je veux coupler cette base avec un serveur web,
je devrais moi-même réaliser un module pour PHP qui puisse insérer et lire des infos dans mon moteur: ça fait 2 programme a réaliser !

Ce projet pourrait aussi s'étendre pour stocker des tests de nombres de Riesel (k*2^p-1)

A titre d'inspiration vous invite a lire ceci:
http://mersenneforum.org/showthread.php?t=10789

et ceci:
http://www.isthe.com/chongo/tech/mat...e-tutorial.pdf

Après avoir fait de la programmation de gestion pendant 5 ans et avoir passé mon temps a haïr le SQL
je me sens bien de réaliser ce "petit" moteur, sauf si je sens que mes compétences brideront drastiquement la rapidité de celui-ci.


Dans un 1er temps

j'aurais besoin de 4 tables: Les utilisateurs, les ordinateurs, les nombres de Mersenne et les assignation de calcul

1 utilisateur peut avoir de 1 à n ordinateur
1 ordinateur a un instant T teste 1 seul nombre
1 nombre a un instant T est testé par 1 seul ordinateur

le soucis c'est la table des nombres de Mersenne;
elle possède 3 parties:
- les nombres déjà calculé 1 fois
- les nombres assignés a un ordinateur pour calcul
- les nombres restant a calculer

Le soucis, c'est si j'utilise 1 seul fichier pour tout les nombres, et pour les 3 parties,
Si j'ai un crash, je risque de perdre tout

Si j'utilise 3 fichiers, il y aura beaucoup d'écriture sur les 3 fichiers au cours d'un mois

les soucis principaux tourne surtout autour du stockage des nombres dans 1 ou 3 fichiers
je pourrais aussi utiliser un vingtaine de fichiers, une par tranche d'exposants (le 'p' de la formule 2^p-1, pouvant servir de clé primaire naturelle):

http://www.mersenne.org/primenet/

...
exposants_080000000_089999999.bin
exposants_090000000_099999999.bin
exposants_100000000_109999999.bin
exposants_110000000_119999999.bin
...

en sachant qu'au cours d'un mois rarement plus d'une tranche sera utilisée.

Voila grosso modo mon projet présenté, si vous avez des suggestions ...

A titre d'exemple: pour 1 nombre j'aurais besoin 32 octets d'infos, 4 pour l’exposant, 28 pour le reste
si je veux stocker tout mes exposants premiers jusqu’à 332192806 cela fait une base de ~512Mo (= (332192806 / Ln(332192806))*32o )

(332192807 est le 1er exposant pour lequel un nombre de Mersenne à 100 millions de chiffres)

Si j'utilise un moteur (MariaDB, MySQL) quelle taille risque de faire la base ?

Pensez-vous que cela est souhaitable de récréer un moteur dans ce cas précis ?
Puis-je espérer des gains de place et de rapidité en interrogation depuis le serveur web ?
Ai-je a y gagner par rapport a utiliser/structurer/optimiser une base sur un moteur existant ?