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,如MongoDB、CouchDB或Hbase等。
归档时间: |
|
查看次数: |
331 次 |
最近记录: |