我正计划实施一个基本的CMS,我将在内部用于自己的开发。我想为自己的需要开发一个自定义的CMS--这个东西比Dreamweaver更轻便,更便于携带,并且冗余度更低,但是面向已经知道如何编码并只需要整合信息的人。本质上,计划是将所有内容都存储在MySQL数据库中,将其全部缓存在文件系统中,然后,每当通过提取PHP文件查询数据时,都会将简单的查询发送到数据库,以检查资源上次更新的时间,并且如果系统上的缓存文件足够近,它将从缓存目录中提取;否则,缓存文件被覆盖。将所有文件上传存储在一个MySQL表中? (TEXT and BLOB)
CMS将存储数据库中的所有上传数据,以便在系统需要移动到另一个主机等时将所有内容都放在一个位置。它还使备份非常简单,并且可以轻松扩展以实现差异/修订存储库等。
我想创建一个包含上传的所有文件和通过CMS界面创建的资源(页面,模板等)的单个表格(例如“资产”)。理想情况下,这将处理两种类型:ASCII(文本)和二进制(BLOB)。
表 “资产”
ID INT,蛞蝓VARCHAR,ASCII LONGTEXT,二进制LONGBLOB,INT类型,元TEXT,修改日期...
我的问题是,是否有意义放这个信息在一个表中? “资产”表中的任何给定行只有ascii列或二进制列中的值,但从来都不会。这是否浪费了空间?完全放慢流程?
不会不必要地选择列。 “type”字段将对应于“types”表中的id,它将列出文本类型(html,模板,明文等)和二进制类型(png,jpg,pdf,mp3,mp4等)。所以,我可以查询,像这样:
(显然伪代码)
$lastModified = SELECT modified FROM assets WHERE slug = $asset_slug;
if last_modified_date_of_file("cache/$asset_slug") != $lastModified :
$type_id = SELECT type FROM assets WHERE id = $asset_id;
$type_col = SELECT col FROM types WHERE id = $type_id;
if $col == 'ascii'
cache_file("cache/$asset_slug", SELECT ascii FROM assets WHERE slug = $asset_slug);
else
cache_file("cache/$asset_slug", SELECT binary FROM assets WHERE slug = $asset_slug);
即使未选择/访问/编制二进制数据,它是否会减慢数据库速度?就像我说的那样,我希望将数据存储在中心位置,但默认情况下它将从文件系统上的缓存文件夹加载。无论如何,你是对的联系人的例子。我还没有决定是否为资产创建另一个“表格” - 许多数据会有少量的任意数据,我正在考虑简单地序列化数据(可能是JSON),并一次从在需要时排。 – 2013-04-21 16:46:57
它只会减慢数据库的速度,因为它消除了高效的机会;除非你处于高流量的情况下,这对你来说不太可能是个问题,这只是一团糟! – 2013-04-26 13:04:13