Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL性能_Mysql - Fatal编程技术网

MYSQL性能

MYSQL性能,mysql,Mysql,我正在尝试开发一个时间卡应用程序。 所以每个月会有30或31天。(带有AM-IN、AM-OUT、PM-IN、PM-OUT等字段)这是mysql中的VARCHAR(4500) 我的想法是将这个一个月的数据(30天)存储在数据库中的一行中。 我正在以XML格式存储30天的数据。因此,在获取数据时,只选择一行 一切都很完美。它工作得很好 该客户预计将有100万用户使用该时间卡。现在,当我创建压力数据时,问题来了。我为100万用户创建了3年的压力数据。 创建的行数正好是(100万*12个月*3)。应用程

我正在尝试开发一个时间卡应用程序。 所以每个月会有30或31天。(带有AM-IN、AM-OUT、PM-IN、PM-OUT等字段)这是mysql中的VARCHAR(4500)

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

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

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

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

在实时情况下(10000个用户并行访问此时间卡页面) tomcat+mysql能处理10000个并行请求吗(我的意思是每次命中30条记录)

使用哪种数据模式 1) 将一个月的数据存储在一行中
或 2) 将1个月的数据存储在30行中

使用哪种数据模式1)存储1 一行或两行中的月份数据) 将1个月的数据存储在30行中

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

以最合理的方式归档之前几个月的数据(见鬼,我甚至会将数据导出到文件,这是纯只读数据)

使用哪种数据模式1)存储1 一行或两行中的月份数据) 将1个月的数据存储在30行中

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

以最合理的方式归档之前几个月的数据(见鬼,我甚至会将数据导出到文件,这是纯只读数据)

在实时(10000个用户并行访问这个时间卡片页面)的情况下,tomcat+mysql能处理10000个并行请求吗(我的意思是每次点击30条记录)

否如果每个用户访问不同的卡,则性能取决于缓存级别 每一次(完全随机),您都有50G的DB,因此您的磁盘将是有界的,不,无论如何,您都无法在一秒钟内从磁盘中的不同位置获取10K记录

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

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

编辑在任何情况下,如果您尝试只存储键/值数据,而不使用额外的索引,我建议您使用比完整关系数据库更简单的方法,查看一下,或者将存档存储和可更新存储分开,因为未更新的存储可能会以不同的方式存储

在实时(10000个用户并行访问这个时间卡片页面)的情况下,tomcat+mysql能处理10000个并行请求吗(我的意思是每次点击30条记录)

否如果每个用户访问不同的卡,则性能取决于缓存级别 每一次(完全随机),您都有50G的DB,因此您的磁盘将是有界的,不,无论如何,您都无法在一秒钟内从磁盘中的不同位置获取10K记录

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

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


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

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

我想我会选择你的第二个数据模型。(每天一行数据)将数据拆分为单独的列更有意义,并允许您进行更好的数据验证、索引、效率等。这看起来是一种基于日期进行分区的好情况,在这里,您可以将分区从主数据表的后面滚下来,并将其存储在成本较低的存储器中,或者按照建议将其导出到文件中。这将使您的表保持在可管理的大小,并允许更好的查询性能。我