首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于FriendFeed的MySql SchemaLess设计的几个问题

关于FriendFeed的MySql SchemaLess设计的几个问题
EN

Stack Overflow用户
提问于 2010-07-28 01:06:21
回答 2查看 1.9K关注 0票数 5

Bret在这篇博文中讨论了SchemaLess设计:http://bret.appspot.com/entry/how-friendfeed-uses-mysql

看起来,它们只将不同类的对象存储在一个table.Then中,构建了更多的索引表。

我的问题是如何在一个类上构建索引。

例如,用户的博客是{id、userid、title、body}。用户的tweet是{id,userid,tweet}。

如果我想为用户的博客建立一个索引,我能做什么?

EN

回答 2

Stack Overflow用户

发布于 2010-07-28 02:37:06

这很简单--也许比你想象的要简单。

当然,当您存储博客实体时,您将插入到主实体表中。一个博客是这样写的:

代码语言:javascript
运行
复制
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: ... }'
);

还可以为每种逻辑类型的属性插入单独的索引表。使用您的示例,博客的userid与tweet的userid不一样。由于您刚刚插入了一个博客,然后将blog属性插入到索引表中:

代码语言:javascript
运行
复制
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');

不要插入任何tweet索引表,因为您只是创建了一个博客,而不是tweet。

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

代码语言:javascript
运行
复制
SELECT e.*
FROM blog_userid u JOIN entities e ON u.id = e.id
WHERE u.userid = 86765309;

关于你的评论:

是的,您可以为所有内容类型应用的任何属性向实体表中添加实际列。例如:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2011-05-21 12:20:48

它们不将不同类的对象存储在同一个表中。它们所指的“实体”表仅用于存储一种实体。

例如,

中的FriendFeed中的一个典型实体可能如下所示:

代码语言:javascript
运行
复制
"id": "71f0c4d2291844cca2df6f486e96e37c",
"user_id": "f48b0440ca0c4f66991c4d5f6a078eaf",
"feed_id": "f48b0440ca0c4f66991c4d5f6a078eaf",
"title": "We just launched a new backend system for FriendFeed!",
"link": "http://friendfeed.com/e/71f0c4d2-2918-44cc-a2df-6f486e96e37c",
"published": 1235697046,
"updated": 1235697046,

要更好地理解实现,请看这里给出的示例:https://github.com/jamesgolick/friendly#readme

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3349188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档