feed mysql表设计_关于FriendFeed的MySql SchemaLess设计的问题

这很简单 – 也许比你想象的要简单.

存储博客实体时,您当然要插入主实体表.博客是这样的:

CREATE TABLE entities (

id INT AUTO_INCREMENT PRIMARY KEY,entity_json TEXT NOT NULL

);

INSERT INTO entities (id,entity_json) VALUES (DEFAULT,'{userid: 8675309,post_date: "2010-07-27",title: "MysqL is Nosql",body: ... }'

);

您还可以为每个逻辑类型的属性插入单独的索引表.使用您的示例,博客的用户标识与推文的用户标识不同.由于您刚刚插入了博客,因此您可以插入索引表中的博客属性:

CREATE TABLE blog_userid (

id INT NOT NULL PRIMARY KEY,userid BIGINT UNSIGNED,KEY (userid,id)

);

INSERT INTO blog_userid (id,userid) VALUES (LAST_INSERT_ID(),8675309);

CREATE TABLE blog_date (

id INT NOT NULL PRIMARY KEY,post_date DATETIME UNSIGNED,KEY (post_date,id)

);

INSERT INTO blog_date (id,post_date) VALUES (LAST_INSERT_ID(),'2010-07-27');

不要插入任何推文索引表,因为你刚刚创建了一个博客,而不是一条推文.

您知道blog_userid参考博客中的所有行,因为这是您插入它们的方式.因此,您可以搜索给定用户的博客:

SELECT e.*

FROM blog_userid u JOIN entities e ON u.id = e.id

WHERE u.userid = 86765309;

你的评论:

是的,您可以将实际列添加到实体表中,以查找适用于所有内容类型的任何属性.例如:

CREATE TABLE entities (

id INT AUTO_INCREMENT PRIMARY KEY,entity_type INT NOT NULL,creation_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,entity_json TEXT NOT NULL

);

entity_type和creation_date的列允许您按时间顺序(或反向时间顺序)爬行实体,并知道哪组索引表与给定行的实体类型匹配.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值