首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每隔15分钟插入一次SQL,大MySQL表

每隔15分钟插入一次SQL,大MySQL表
EN

Stack Overflow用户
提问于 2011-07-16 05:38:19
回答 3查看 405关注 0票数 0

我对web开发的大部分方面都相当熟悉,我认为自己是初级程序员。当我想到应用程序扩展时,我总是很焦虑,并想了解更多关于它的知识。让我们有一个假设的情况。

我正在开发一个web应用程序,它轮询设备并以15分钟为间隔获取大约2kb的XML数据。这些数据必须存储很长时间(至少几年?)。现在想象一下,这个web应用程序有100个用户,每个用户都有这个设备。

10年后,我们谈论的是数千万个表行。对于100个用户,我们有一个cron作业,它查询每个用户的设备,获取2kb的XML,并每15分钟将其插入到SQL数据库中。

假设我的查询相对简单,只收集必要的列,使用连接,并避免子查询,有什么理由不能扩展吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-16 07:09:23

假设我的查询相对简单,只收集必要的列,使用连接,并避免子查询,有什么理由不能扩展吗?

当你变大的时候,你应该把你的活动数据集放在内存数据库中(比磁盘更快),就像Facebook、Twitter等一样。推特的速度变得非常慢,因为他们没有将活动数据集放入内存/向上扩展=>。很多人称这种情况为失败鲸。两者都使用memcached来实现这一点,但如果您只是一个单独的机器,您也可以使用Redis(我喜欢这样)或APC。如果你想要性能,你应该总是安装APC,因为APC是用来缓存编译的字节码的。

大多数PHP加速器的工作方式是缓存PHP脚本的已编译字节码,以避免在每次请求时解析和编译源代码的开销(其中一些甚至全部可能永远不会执行)。为了进一步提高性能,缓存的代码存储在共享内存中,并直接从那里执行,从而最大限度地减少运行时缓慢的磁盘读取和内存复制。

票数 0
EN

Stack Overflow用户

发布于 2011-07-16 05:41:51

插入通常不会随着表的变大而变慢,但索引更新可能需要更长的时间。在某些情况下,您可能希望将该表拆分为两部分。一个用于归档存储,针对数据检索进行了优化(基本上是索引),第二个表用于处理较新的数据,针对插入进行了更多优化(索引更少)。

但一如既往,唯一确定的方法就是对事物进行基准测试。设置一些几千行的克隆表和数百万行的克隆表,看看会发生什么。

票数 4
EN

Stack Overflow用户

发布于 2011-07-16 05:44:48

您可以始终考虑使用partitioning自动按日期拆分数据文件,并将较旧的记录老化到速度较慢的高容量磁盘阵列,同时将较新的记录(和插入内容)保留在高速阵列上。然后,您的索引构建将只需处理部分数据,而不是整个事务,并且应该快速进行(磁盘I/O通常是数据库系统中最慢的部分)。

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

https://stackoverflow.com/questions/6713423

复制
相关文章

相似问题

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