推荐结构?%70 写入 %30 读取。10M 排。200 次查询/秒。选择、更新、插入、搜索

noa*_*arm 5 mysql innodb myisam full-text-search architecture

以下是我需要在我的项目中做的事情:

1- 如果搜索词是新的且唯一的,则添加搜索词

2- 显示最近搜索的 1000 个搜索词(我不需要存储所有搜索词的日期)

3- 为一个搜索词显示 20 个相似的搜索词

4- 如果旧搜索词再次搜索,则更新搜索词的查看次数。

http://www.ptf.com/tai/tai+ve+dot+kich/和其他一些大型网站使用搜索词的第一个词来提高性能,我相信。但我不确定如何应用该结构。

此外,您可以从链接中了解我在做什么。

这是当前的结构,我知道它很糟糕:

mysql> use article; SHOW TABLE STATUS LIKE 'searches';
Database changed
+----------+--------+---------+------------+--------+----------------+-------------+-----------------+--------------+-----------+----------------+--------------
-------+---------------------+---------------------+-----------------+----------+----------------+---------+
| Name     | Engine | Version | Row_format | Rows   | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time| Update_time         | Check_time          | Collation       | Checksum | Create_options | Comment |
+----------+--------+---------+------------+--------+----------------+-------------+-----------------+--------------+-----------+----------------+--------------
-------+---------------------+---------------------+-----------------+----------+----------------+---------+
| searches | MyISAM |      10 | Dynamic    | 973577 |             40 |    38960308 | 281474976710655 |     91711488 |         0 |           NULL | 2012-02-08 22:22:33 | 2012-02-09 11:32:31 | 2012-02-08 22:23:50 | utf8_general_ci |     NULL |                |         |
+----------+--------+---------+------------+--------+----------------+-------------+-----------------+--------------+-----------+----------------+--------------
-------+---------------------+---------------------+-----------------+----------+----------------+---------+
1 row in set (0.00 sec)

mysql> DESCRIBE searches;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(10)      | NO   |     | NULL    |       |
| q     | varchar(255) | NO   | PRI |         |       |
| date  | datetime     | NO   | MUL | NULL    |       |
| view  | int(10)      | NO   |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)


mysql> SHOW INDEXES FROM searches;
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table    | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| searches |          0 | PRIMARY  |            1 | q           | A         |      973577 |     NULL | NULL   |      | BTREE      |         |
| searches |          1 | date     |            1 | date        | A         |        3416 |     NULL | NULL   |      | BTREE      |         |
| searches |          1 | q        |            1 | q           | NULL      |       21635 |     NULL | NULL   |      | FULLTEXT   |         |
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
3 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

目前,此表有 %70 次写入和 %30 次读取。

假设有 1000 万行,并且每秒执行 200 次搜索。这种需求的推荐结构是什么?

我正在努力解决此表上的几个索引和字段组合,但我无法做出任何重大改进。所以如果你能帮忙我会很高兴的!

azz*_*axp -7

对于此类项目......以及写入多于读取的场景,并且您需要处理大规模数据,您应该选择 NoSQL,如MongoDBCouchDBHbase等。

  • 我不认为在没有任何有关如何使用该技术解决提问者问题的详细信息的情况下提出切换技术的建议有什么帮助。 (10认同)
  • 抱歉,但通常来说,转换技术并不是正确的答案。该数据集应该不难达到所需的性能。 (8认同)
  • 我们在单个 PostgreSQL 数据库服务器上每秒进行约 3000 - 5000 次写入,约 300 - 500 个并发用户,24/7。为什么我们需要 NoSQL?那能解决什么问题呢?dbms 是一项很好的技术。 (5认同)