2011-03-31 2 views
0

Je viens de trouver l'idée d'écrire une base de données spéciale qui correspond exactement à un but. J'ai examiné plusieurs autres systèmes de base de données et suis arrivé à la conclusion que j'avais besoin d'un type personnalisé. Cependant, ma question n'est pas de savoir si c'est une bonne idée, mais comment mettre en œuvre le mieux possible.Déterminer le moyen le plus efficace pour un serveur de base de données personnalisé (PHP)

L'application elle-même est écrite en php et doit écrire dans un système de base de données personnalisé. Parce qu'il peut y avoir des opérations de lecture/écriture simultanées, je peux oublier l'idée d'implémenter la base de données directement dans mon application. (Corrigez-moi s'il vous plaît si je me trompe).

Cela signifie que je dois créer 2 scripts:

  1. La base de données serveur scripts
  2. L'application.

Cela signifie que l'application doit communiquer avec le serveur. Mon idée utilisait php en mode cli pour le serveur de base de données. La question est, si cela est efficace, ou si je devrais regarder dans un langage de programmation comme C++ pour développer l'application serveur? La deuxième question est alors la communication. Lors de l'utilisation de php en mode cli, j'ai pensé donner une requête sérialisée-array en param. Lors de l'utilisation de C++ devrais-je encore le faire en série? ou peut-être en json, ou quoi?

Je dois noter qu'une base de données à rechercher peut contenir plusieurs milliers d'entrées. Donc, je ne sais pas exactement si php est vraiment le bon choix. Deuxièmement, je dois noter que les requêtes ne sont pas des chaînes qui doivent être analysées, mais un tableau donnant une clé, un filtre de valeur ou un jeu de données. La seule chose peut-être plus complexe que le serveur de base de données doit pouvoir comparer des chaînes comme la version MySQL de LIKE '% VALUE%', qui pourrait être lent à plusieurs milliers d'entrées.

Merci pour l'aide.

+1

Je ne recommanderais * pas * de créer votre propre base de données, surtout avec PHP. Les bases de données sont des logiciels extrêmement volumineux et complexes. Quel est votre cas d'utilisation? Nous pourrions probablement vous recommander quelques alternatives – chriso

+0

Si vous vous demandez comment écrire votre propre serveur de base de données, vous n'avez généralement pas envie de l'écrire, mais vous ne le savez pas encore. – Archimedix

+0

J'ai Datasbes et des tableaux comme les bases de données habituelles ont. Mais je n'ai pas de colonnes. Chaque entrée peut avoir ses propres colonnes, à l'exception de l'identifiant. je pourrais utiliser mysql id | données sérialisées ... mais beaucoup de plaisir à chercher sur un paramètre spécifique dans une entrée –

Répondre

0

écrit une base de données spéciale qui s'adaptera exactement un but

Je suppose que vous voulez dire un système de gestion de base de données personnalisée,

Je vais avoir beaucoup de mal undertanding pourquoi ce serait jamais être nécessaire.

Les bases de données et les tables comme les bases de données usuelles ont. Mais je n'ai pas de colonnes. Chaque entrée peut avoir ses propres colonnes, à l'exception de l'ID

Ce n'est pas une très bonne raison pour vous (et vos utilisateurs) de faire beaucoup de peine et d'efforts.

Je pourrais utiliser mysql id | données sérialisés ... mais beaucoup de plaisir à la recherche sur un paramètre spécifique dans une entrée

Alors quel est le problème avec un modèle entièrement mis en œuvre polymorphes sur une base de données relationnelle:

CREATE TABLE relation (
    id INTEGER NOT NULL auto_increment, 
    .... 
    PRIMARY KEY (id) 
); 
CREATE TABLE col_string (
    relation_id NOT NULL /* references relation.id */ 
    name VARCHAR(20), 
    val_string VARCHAR(40), 
    PRIMARY KEY (relation_id, name) 
); 
CREATE TABLE col_integer (
    relation_id NOT NULL /* references relation.id */ 
    name VARCHAR(20), 
    val_integer INTEGER, 
    PRIMARY KEY (relation_id, name) 
); 
CREATE TABLE col_float (
    relation_id NOT NULL /* references relation.id */ 
    name VARCHAR(20), 
    val_float INTEGER, 
    PRIMARY KEY (relation_id, name) 
); 

... et tables pour BLOBs, DATEs, etc

Ou si l'évolutivité n'est pas un gros problème ....

CREATE TABLE all_cols (
    relation_id NOT NULL /* references relation.id */ 
    name VARCHAR(20), 
    ctype ENUM('string','integer','float',...), 
    val_string VARCHAR(40), 
    val_integer INTEGER, 
    val_float INTEGER, 
    ... 
    PRIMARY KEY (relation_id, name) 
); 

Oui, inserts et en sélectionnant « lignes » est plus compliquée que pour une table relationnelle normale - mais beaucoup plus simple que d'écrire votre propre SGBD à partir de zéro. Et vous pouvez envelopper la plupart des fonctionnalités dans les procédures stockées. La méthode décrite serait aussi facilement mappée à un db NoSQL.

Questions connexes