我正在尝试开发基于网络的数字资产管理应用程序。我打算在Codeigniter中使用mysql作为db。这是一个受欢迎的地区性报纸。他们将输入1000个条目和TB的数据作为每日吨信息。
将会有不同的内容类型,如媒体,个性,事件,问题,杂项等...所有这些都将被分类。事情就是互相联系。例如,活动“奥运会”将连接到人员表中的所有参与者以及与此相关的所有媒体。我打算使用表'connections'
实现这种复杂的互连id - subject - connection - type
-------------------------------------------
1 98 190 media
2 283 992 issue
3 498 130 info
所以当一个人参加奥运会时......所有的联系都会从这张表中填充。 'subject'列的id为'olympics',连接将具有连接条目的id。
有更好的方法吗?必须根据100个不同的标准搜索内容。但最终用户将会非常少。只有报纸的记者(Max 100)才能访问这个应用程序,因此流量或负载将会非常少,但存储的信息量将非常高。我想听听经验丰富的开发人员,因为我没有太多经验做这样的大事。
答案 0 :(得分:3)
这是一个复杂的问题,因为您需要了解很多关于调整和配置MySQL数据库的知识,以便处理负载和数据。如此少量的用户,您可以在连接方面做得更好,因此执行时间是真正的瓶颈。
如果您使用的是32位服务器,则表的最大行数为42亿和4GB,不进行任何配置更改。您可以提高4GB的表限制,但据我所知,42位服务器上的最大行数限制为42亿次。
您的表似乎没问题,但我会将“类型”更改为ENUM,因此数据不是文本(减少整体表格大小)。
您必须正确地索引此表,并从主题,类型的外观开始。如果没有使用连接的硬数字/示例查询,很难猜测这个查询的运行速度有多快,但如果它的索引正确且基数很高,你应该没问题。
你总是可以在PHP和MySQL之间抛出一个Memcache层来缓存一些结果,这样你就可以在执行类似的搜索时获得更好的性能。使用“100的不同标准”虽然你很可能会在数据库中占据一席之地。
相反,您还可以查看一些NoSQL选项,例如MongoDB,这取决于您的数据可能更适合。