存储和检索400-500k个用户数据字段有哪些选项(+vs和-vs)


What are the options, with +vs and -vs, for store and retrieval of 400-500k fields of user data?

上下文

我正在建立一个网站来帮助人们学习外语。

我从事PHP和PDO工作。我的数据库后端是MySQL。(对于那些感兴趣的人来说,前端都是用HTML5、CSS和Javascript完成的。)

这个问题的本质是如何最好地规划/构建网络应用程序的后端,这需要为许多用户存储大量单独的数据项。

我已经拥有的和我想做的

我有四个数据库表:

  1. 包含语言中文本语料库的每个单词,带有引理以及形态学标记。(350000多行)
  2. 包含单词词典,引理数字与表1匹配。(6-7000行)
  3. 包含需要学习的语法词素列表。(500-1000行)
  4. 包含用户列表

我希望用户对语料库中的每个单词都有一个了解程度的评分。每个单词:

  1. 词位意义识别分数
  2. x3与此相关的语法解析的不同方面的不同分数特定语言

我还希望用户对不同语法词素的了解程度有一个评分。换句话说,对于每个用户,我希望存储和检索多达400-500k个字段。

我想知道的

我很确定,我不能将每个用户的所有数据存储在数据库表中,因为所需的列数远远超过了SQL中允许的最大值(根据我的研究:1k,在某些系统上可能是4k)。

目前,我所知道的唯一选项是为每个用户将数据存储在xml文件中,或为每个用户存储在csv文件中。

我有什么选择?这些选项的+ves和-ves是什么?谢谢你的时间和帮助。

我强烈建议使用(a)联接表:

  • Word ID
  • 用户ID
  • Lexem分数
  • x3语法分数

使用(UserID, WordID)的PK(可能还有WordID上的一个辅助键),您会得到一个表,该表最多有350k*Usercount行,仅(或大部分)通过PK访问,具有接近完美的索引位置,这似乎很容易管理。

编辑

假设单词表和用户表都有一个称为id的整数PK,并且分数是正整数,那么要创建联接表,就需要

CREATE TABLE scores (
  wordID INT NOT NULL,
  userID INT NOT NULL,
  lexscore UNSIGNED INT DEFAULT NULL,
  gramscoreA UNSIGNED INT DEFAULT NULL,
  gramscoreB UNSIGNED INT DEFAULT NULL,
  gramscoreC UNSIGNED INT DEFAULT NULL,
  PRIMARY KEY(userID, wordID)
)