我刚刚想到了编写一个适合一个目的的特殊数据库的想法。我已经研究了其他几个数据库系统,并得出结论我需要一个自定义类型。但是,我的问题不是关于它是否是一个好主意,而是如何实现这一点。
应用程序本身是用PHP编写的,需要写入自定义数据库系统。 因为可以同时进行读/写操作,所以我可以忘记将数据库直接实现到我的应用程序中的想法。 (如果我错了,请纠正我。)
这意味着我必须创建2个脚本:
这意味着应用程序必须与服务器通信。我的想法是在cli模式下使用php作为数据库服务器。问题是,如果这是有效的,或者我应该研究像c ++这样的编程语言来开发服务器应用程序?第二个问题是沟通。在cli模式下使用php时,我考虑过将序列化数组查询作为参数。使用c ++时我还应该序列化吗?或者也许是在json,或其他什么?
我必须注意,要搜索的数据库可以包含数千个条目。所以我不确切知道php是否真的是正确的选择。 其次,我必须注意查询不是必须要解析的字符串,而是一个给出键,值过滤器或数据集的数组。数据库服务器必须能够更复杂的事情是比较像LIKE'%VALUE%'的MySQL版本这样的字符串,这可能在数千个条目中很慢。
感谢您的帮助。
答案 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数据库。