小编Jos*_*ero的帖子

需要数据库架构疯狂的最佳方法

我们正在为我们的创业公司建立一个调度系统

它只是一个普通的,除了我们愿意实现的"自动查找"功能.LAMP架构.没什么特别的.

这就是数据库的外观.三个主要表格:

  • 办公室(id,start_time,stop_time)
  • 人物(id,office_id,start_time,stop_time)
  • 时间表(id,people_id,start_time,stop_time)

start_time/stop_time是TIMESTAMPS.

表不需要这样.这只是我们目前有.

办公室桌有办公室的开放/关闭时间.这张桌子每个办公室可能大到365天,因为每天的开/关时间不一样.请注意,它可能多达1000个办事处.这使得表中大约有365,000条记录.

人们有加入/离开时间.这显然比办公室更具限制性.同样,一年中的每一天,人们都可以有不同的访问时间.每个办公室约有50人.这使得1000个办事处*365天*50名员工= 18,250,000条记录.

时间表是谁会见谁.每个人最多可以有10次会议/天.是的,在这一点上,这个表中很容易产生182.5百万行.

除了大数字之外没什么奇怪的.应用程序需要做的是:给办公室,见面人和持续时间,显示前5个可用日期.

根据我们的信念,这个应用程序将完全杀死我们的服务器.我们迫切希望能够实现这一目标.我们首先想到的是"这根本不可能".但是嘿!一切皆有可能在软件中,不是吗?

PS:如果有人想到一个让应用程序可行的更好的方法,我们真的很感激它.

非常感谢阅读.希望一些铁杆程序员可以帮助我们.

更新:

出于测试目的,我们创建了两个完全相同的表:

会议和办公室(id,profesional,start,stop).

ID是主要的,其余是BTREE索引.SQL是这样的(100%不起作用):

SELECT a.profesional, a.stop AS desde, Min(b.start) AS hasta 
FROM meetings AS a 
  JOIN meetings AS b 
    ON  a.profesional=b.profesional 
    AND a.stop < b.start 
WHERE a.profesional = 1 
  AND b.profesional = 1 
GROUP BY a.start 

UNION 

SELECT m.profesional, MIN(m.start), MIN(j.start) 
FROM offices m 
  JOIN meetings j 
    ON  j.profesional = m.profesional 
WHERE …
Run Code Online (Sandbox Code Playgroud)

php mysql architecture

4
推荐指数
1
解决办法
146
查看次数

标签 统计

architecture ×1

mysql ×1

php ×1