在线教师工程大小查看说明 - 离线版

用于比较在线版导入压缩后的教师工程大小与本地离线版工程 JSON 大小。

一、数据保存位置

在线版教师工程主要保存在 PostgreSQL 数据库:

二、查看最近任务工程大小

cd /var/www/quiz

sudo -u postgres psql -d quiz -c "
SELECT
  id,
  title,
  created_at,
  pg_size_pretty(pg_column_size(project_json)::bigint) AS db_size,
  pg_size_pretty(octet_length(project_json::text)::bigint) AS text_size,
  ((length(project_json::text) - length(replace(project_json::text, 'data:image', ''))) / length('data:image')) AS image_count
FROM assignments
ORDER BY id DESC
LIMIT 30;
"

三、按大小排序找大工程

sudo -u postgres psql -d quiz -c "
SELECT
  id,
  title,
  created_at,
  pg_size_pretty(pg_column_size(project_json)::bigint) AS db_size,
  pg_size_pretty(octet_length(project_json::text)::bigint) AS text_size
FROM assignments
ORDER BY pg_column_size(project_json) DESC
LIMIT 20;
"

四、查看所有在线工程总大小

sudo -u postgres psql -d quiz -c "
SELECT
  COUNT(*) AS assignment_count,
  pg_size_pretty(SUM(pg_column_size(project_json))::bigint) AS total_project_json_db_size,
  pg_size_pretty(SUM(octet_length(project_json::text))::bigint) AS total_project_json_text_size,
  pg_size_pretty(SUM(pg_column_size(questions_json))::bigint) AS total_questions_json_db_size
FROM assignments;
"

五、导出某个在线工程 JSON 文件

例如导出任务 66:

sudo -u postgres psql -d quiz -Atc "SELECT project_json::text FROM assignments WHERE id=66;" > /tmp/assignment_66_project.json

ls -lh /tmp/assignment_66_project.json
wc -c /tmp/assignment_66_project.json

如需压缩后比较:

gzip -c /tmp/assignment_66_project.json > /tmp/assignment_66_project.json.gz
ls -lh /tmp/assignment_66_project.json /tmp/assignment_66_project.json.gz

六、查看 API 实际返回大小

curl -s -o /tmp/assignment_66_api.json -w "download_size_bytes=%{size_download}\n" "http://127.0.0.1:3000/api/assignments/66"

ls -lh /tmp/assignment_66_api.json
wc -c /tmp/assignment_66_api.json

这个大小更接近浏览器实际拿到的数据量。

七、建议比较方法

  1. 记录本地离线版原始 JSON 文件大小。
  2. 导入在线版发布任务。
  3. 用上面的 SQL 查看 text_size
  4. 导出在线 project_json 到临时 JSON 文件。
  5. 对比本地原始 JSON、在线导出 JSON、gzip 后大小。