php - 在没有仅索引表的情况下跟踪开/关

标签 php mysql database

我正在寻找最好的、最具可扩展性的方式来跟踪大量的开/关。开/关适用于项目,编号从 1 到大约 6000 万。 (在我的例子中,开/关是成员(member)的书是否被编入索引,这是一个单独的过程。)

开/关必须按项目编号快速搜索。它们不断变化,因此重新编制索引的成本不会很高。新项目添加到表格末尾的频率较低。

我认为,理想的解决方案是一个只有索引的表——一个每个字段都是主键一部分的表。我知道 ORACLE 有这个,但 MySQL 的引擎没有。

如果我使用 MySQL,我认为我的选择是:

  1. 一个包含两个字段的表——项目和“开/关”字段。将使用 UPDATE 处理更改。

  2. 单字段表 -- 项目。在 table 上意味着“在”。使用 INSERT 和 DELETE 处理更改。

我对其他技术持开放态度。将整个内容按位存储在文件中?

最佳答案

使用选项 #1 可能会更灵活,但两者都会有效。但是,如果速度是一个问题,您可能需要考虑创建一个 HEAP 表,该表在 mysql 启动时预先填充并与其他进程一起维护。此外,在表中使用 int 和 enum 字段类型。因为它全部保存在内存中,它应该快如闪电,而且因为表中存储的数据不多,6000 万条记录在内存方面应该不是一个巨大的负担。如果我必须粗略估计:

int(8)(为了增长,假设有一天你会超过 1 亿条记录)

枚举(0,1)

所以让我们四舍五入到每条记录 10 个字节:

10 * 60,000,000 = 600,000,000

这大约是 572 MB 的数据,加上索引和额外的开销,所以我们粗略地说...一个 600 MB 的表。如果您的服务器上有这种内存可用,那么 HEAP 表可能是最佳选择。

关于php - 在没有仅索引表的情况下跟踪开/关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5891789/

相关文章:

php - Laravel 5.5 中未写入日志文件

php - 从 Zend 和 PHP 配置对 MySQL 的数据库访问时遇到问题

php - 如何不杀死服务器并通过 simplexml 类和 GD 刷新超过 2000 个图像?

java - 如何检索数据库中已保存的字段?

sql - 存储用于分页的 SQL Server 查询结果

php - 在 MySQL 中使用 INSERT 时没有选择数据库?

mysql - 不使用 mysqldump 复制数据库

PHP MySQL - 极其缓慢的循环

java - 保留 GWT 可视化 API 数据表

WHERE 子句中的 MySQL 变量