首页
学习
活动
专区
圈层
工具
发布

MYSQL性能
EN

Stack Overflow用户
提问于 2009-07-31 11:58:19
回答 3查看 134关注 0票数 1

我正在尝试开发一个考勤卡应用程序。因此,对于每个月,将有30或31天。(具有字段AM-IN、AM-OUT、PM-IN、PM-OUT等),它是mysql中的VARCHAR(4500

我的想法是将这个一个月的数据(30天)存储到数据库的一行中。我以XML格式存储30天的数据。因此,在提取时,只选择了一行。

一切都是完美的。它工作得很好。

客户端预计将有100万用户使用此考勤卡。现在,当我创建压力数据时,问题来了。我为100万用户创建了为期3年的压力数据。创建的行数正好为(100万行* 12个月*3行)。应用程序运行正常。但是当我看到磁盘使用情况时,这个表消耗了50 GB。我确信这50 GB的消耗是由于VARCHAR(4500)。如果我把它分成不同的列,这个问题就不存在了。

这是我的问题。如果我将时间卡VARCHAR(4500)拆分为不同的字段,我将存储每天的行。所以存储的行数将是(100万* 12个月* 30天*3)

在实时(10,000个用户并行访问这个时间卡页面)的情况下,tomcat + mysql是否可以处理10,000个并行请求(我的意思是每次命中获取30条记录)?

使用哪种数据模式1)在单行中存储1个月的数据

代码语言:javascript
复制
    or 2) Storing 1 month data in 30 rows?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-31 12:30:22

我想我会用你的第二个数据模型。(每天一行数据)将数据拆分成单独的列更有意义,并将允许您执行更好的数据验证、索引、效率等。这看起来是基于日期使用分区的好情况,在这种情况下,您可以将分区从主数据表的背面滚动并将其存储在成本较低的存储中,或者按照意大利的建议将其导出到文件中。这将使您的表保持在可管理的大小,并允许更好的查询性能。我建议阅读您为MySQL提供的不同存储引擎选项,因为它们的实现方面可能会根据您需要的吞吐量极大地改变性能。

票数 1
EN

Stack Overflow用户

发布于 2009-07-31 12:06:08

使用哪种数据模式1)在单行中存储1个月的数据,还是2)在30行中存储1个月的数据?

以最快的方式存储当前月份。

以最有意义的方式归档前几个月的数据(Heck,我甚至会将数据导出到一个文件,这是纯粹的只读数据)。

票数 0
EN

Stack Overflow用户

发布于 2009-07-31 12:18:10

在实时(10,000个用户并行访问这个时间卡页面)的情况下,

+ mysql是否可以处理10,000个并行请求(我的意思是每次命中获取30条记录)?

不,性能取决于缓存的级别,如果每个用户每次访问不同的卡(完全随机),并且您有50G的数据库,因此您将是有磁盘限制的,并且在任何情况下,您都不能在一秒内从磁盘中的不同位置获取10K记录。

另一方面,99.9%的用户只访问最近的条目,因此50/12/3 ~= 1.5G频繁访问数据,因此数据存储在内存缓存中,您可能有机会在具有大量内存和CPU的计算机上为每个用户获取10K请求,但我不认为您可以在并行请求中做到这一点,因为MySQL每个连接都有线程。

在任何情况下,您都可能需要准备将数据库分区到多个服务器,以便能够向上扩展并在内存中实现高效的条目缓存。

编辑在任何情况下,如果您尝试只存储键/值数据,而没有额外的索引,我建议使用比完整的关系数据库更简单的东西,看看http://memcachedb.org/,或者将归档存储和可以更新的存储分开--因为没有更新的存储可能会以不同的方式存储。

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

https://stackoverflow.com/questions/1212148

复制
相关文章

相似问题

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