首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效的数据库操作

高效的数据库操作
EN

Stack Overflow用户
提问于 2011-01-26 23:11:45
回答 2查看 95关注 0票数 0

这是我在工作中研究解决方案的场景。我们在postgres中有一个表,用于存储网络上发生的事件。目前它的工作方式是,随着网络事件的到来插入行,同时删除与特定时间戳匹配的较旧记录,以便将表大小限制在大约10,000条记录。基本上,类似于日志轮换的想法。网络事件一次会激增数千个,因此事务率过高会导致性能下降,经过一段时间后,服务器就会崩溃或变得非常慢,最重要的是,客户要求将表大小保持在最大百万条记录,这将加速性能下降(因为我们必须不断删除与特定时间戳匹配的记录),并导致空间管理问题。我们使用简单的JDBC对表进行读写。技术社区可以建议更好的方式来处理这个表中的插入和删除吗?

EN

回答 2

Stack Overflow用户

发布于 2011-01-26 23:21:19

我认为我会使用分区表,可能是所需总大小的10倍,插入到最新的分区中,然后删除最旧的分区。

http://www.postgresql.org/docs/9.0/static/ddl-partitioning.html

这使得“删除最旧的”的负载比查询和删除要小得多。

更新:我同意nos的评论,但插入/删除可能不是您的瓶颈。也许先做些调查。

票数 4
EN

Stack Overflow用户

发布于 2011-01-26 23:32:32

一些你可以尝试的东西-

  • 写入日志,有一个单独的批处理过程。向表写入。
  • 保持写入原样,定期或在流量较低时执行删除。
  • 执行对缓冲区/高速缓存的写入,使实际的数据库写入发生在缓冲区。

以下是一些一般性建议:

  • 由于您是根据时间戳进行删除的,因此请确保时间戳已编入索引。您也可以使用计数器/自动递增的rowId (例如,delete where id< currentId -1000000)来执行此操作。
  • 另外,JDBC批量写入比单个行写入要快得多(很容易实现数量级的加速)。如果你能缓冲写操作,一次写100行将会有很大的帮助。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4806128

复制
相关文章

相似问题

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