找出自定义数据库服务器(PHP)最有效的方法

时间:2011-03-31 10:54:35

标签: php database

我刚刚想到了编写一个适合一个目的的特殊数据库的想法。我已经研究了其他几个数据库系统,并得出结论我需要一个自定义类型。但是,我的问题不是关于它是否是一个好主意,而是如何实现这一点。

应用程序本身是用PHP编写的,需要写入自定义数据库系统。 因为可以同时进行读/写操作,所以我可以忘记将数据库直接实现到我的应用程序中的想法。 (如果我错了,请纠正我。)

这意味着我必须创建2个脚本:

  1. 数据库服务器脚本
  2. 申请。
  3. 这意味着应用程序必须与服务器通信。我的想法是在cli模式下使用php作为数据库服务器。问题是,如果这是有效的,或者我应该研究像c ++这样的编程语言来开发服务器应用程序?第二个问题是沟通。在cli模式下使用php时,我考虑过将序列化数组查询作为参数。使用c ++时我还应该序列化吗?或者也许是在json,或其他什么?

    我必须注意,要搜索的数据库可以包含数千个条目。所以我不确切知道php是否真的是正确的选择。 其次,我必须注意查询不是必须要解析的字符串,而是一个给出键,值过滤器或数据集的数组。数据库服务器必须能够更复杂的事情是比较像LIKE'%VALUE%'的MySQL版本这样的字符串,这可能在数千个条目中很慢。

    感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  

编写一个适合一个目的的特殊数据库

我认为你的意思是自定义数据库管理系统,

我在为什么这是必要的时候遇到了很多麻烦。

  

Datasbes和Table就像通常的数据库一样。但我没有专栏。除了id

之外,每个条目都有自己的列

这不是让自己(和你的用户)付出巨大痛苦和努力的一个很好的理由。

  

我可以使用mysql id |序列化数据...但是在条目中的特定参数上搜索非常有趣

那么在关系数据库上实现的完全多态模型出了什么问题:

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)
);

...以及BLOB,DATE等表格

或者可扩展性不是一个大问题....

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)
);

是的,插入和选择“行”比普通的关系表更复杂 - 但比从头开始编写自己的DBMS要简单得多。并且您可以将大多数功能包装在存储过程中。所描述的方法也可以轻松映射到NoSQL数据库。