【问题标题】:How to save big data in mysql?如何在mysql中保存大数据?
【发布时间】:2019-02-10 15:43:17
【问题描述】:

我有很多大文本文件,我想将它们保存在我的数据库中。我已经编写了一个可以保护少量数据的 shell 脚本,但是当我尝试使用一些大文件时,我得到以下错误:

mysql: Argument list too long

列内容的类型为longtext。

test.txt 有 60 个字,内容安全。 如果我对 austen-emma.txt(有 158167 个字)尝试相同的操作,我会收到描述的错误。

#!/bin/sh

content=`cat /srv/data/english_gutenberg_corpus/test.txt`

db_value=`mysql -u admin -padmin --database=bp12 -e "INSERT INTO db_connector_text (author, date, genre, content, title, language, source, wordlength) VALUES ('lel', '1970-01-16', 'NULL', '$content', 'Lyrische elemente', 'German', 'kp', 20)"`

这个问题有解决办法吗?

【问题讨论】:

    标签: mysql shell debian mariadb


    【解决方案1】:

    /bin/sh 对命令大小有限制,可能只有 5KB。切换到其他处理数据的方式。无论您最终采用哪种数据库方法,您都需要学习一种编程语言(Perl、Java、VB 等)来完成这项工作。

    如果你在 MySQL 中使用 LOAD_FILE 函数,你可以坚持使用 sh,但我不推荐它用于任何重要的事情。

    大量的大文本文件

    您将如何处理这些文件?在网页上显示它们?用一些程序来操纵它们?提供他们的超链接?分析它们的词结构?其他?

    我想安全地保存在我的数据库中

    请定义“安全”。 “安全”,如防止旁观者? “崩溃安全”,在您的服务器死机后仍然存在吗? “防止更改”,与文件权限一样?其他?

    【讨论】:

    • 我现在写了一个小python程序。我没有问题将数据存储在临时变量中。
    • @Levo - 一定要“转义”或“绑定”,以免在INSERT 期间出现语法错误。
    【解决方案2】:

    我不建议使用关系数据库来存储不同大小的大型文件。

    最好使用 NoSQL 数据库,例如 Google 的 Firebase 等。

    https://firebase.google.com

    【讨论】:

    • 但是我们需要一个关系数据库。此外,我们拥有的数据不会超过 30 GB。
    • @Levo - LONGTEXT 限制为 4GB。 (实际上,其他一些限制使得超过 16MB 变得很困难。)
    • 你总是可以有两个数据库,你不限于每个应用程序一个:)
    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 2011-10-15
    • 1970-01-01
    • 2019-04-14
    • 2018-12-07
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多