從 Excel 上傳海量數據 - 技術
我是一名開發人員,在針對特定要求的數據庫技術方面尋求幫助。我做了一些研究,但不能以列表結束。
要求:將有一個 Web 應用程序允許使用者上傳指定格式的 Excel 文件(預計 100 萬行),然後它將保存在數據庫中的某個位置,並對我們的數據庫值執行一些計算。之後將根據計算向使用者顯示一些數字/圖表。
- 我的第一個問題是 MySQL DB 是否足以滿足這一要求,而不是像 Postgres 這樣的任何其他 DB?
- 第二個問題是,考慮到將有 6 列,從 Excel 上傳 100 萬行數據需要多長時間?
- 第三,我應該考慮哪些技術來讓這個應用程序快速高效,比如 InnoDB 等。
我再次完成了我的研究,但我無法得出結論,任何數據庫專家的回饋/幫助將不勝感激。
我可以為 Postgres 說話。如果您是超級使用者,PostgreSQL 的複制速度非常快。Postgresql 有一個
copy to
命令。只需將文件保存為 csv(也可以在 excel 中打開)並使用:COPY table FROM 'fpath' CSV HEADER DELIMITER ';'
你也可以複製任何東西
COPY (SELECT STATEMENT) TO 'fpath'
。如果您必須使用 .xlsx 之類的 excel 格式,為什麼不使用Pentaho 之類的東西並開發一個可以連接到任何數據庫的應用程序。這個有一個java api。其他 ETL 工具也可以解決問題。
在這些情況下,上傳速度低於 10 分鐘。我最後一次通過 900000 行的非商業網路上傳在 Pentaho 持續了 20 分鐘。直接複製到 PostgreSQL 中實際上要快得多。
至於速度,查詢是您的主要問題。如果你只是複制和查詢,Postgres 很好。但是,如果您正在執行密集查詢,則很重要;聚合,使用像 Pentaho 這樣的 ETL 工具,您可以從 Java 執行並連接連接池,如用於 Postgres 的BoneCP或用於其他數據庫的其他連接池軟體。
大多數數據庫支持連接池,但有連接限制,因此請查看您的配置設置。
- MySQL 可以很好地處理數百萬條記錄,並且是可用的最流行的數據庫之一,因此您會在 Web 上找到大量支持和工具。MySQL 與 PostgreSQL(另一個優秀的數據庫)等其他數據庫之間幾乎沒有性能差異。
- 我經常使用http://excel2mysql.net自動導入 100 萬+條記錄(我是作者)。在相當快的機器和伺服器連接上,包含 6 列的 100 萬條記錄應該需要不到 5 分鐘的時間來導入。我在http://youtu.be/e5JU6Fn_JYc有一段影片展示了它在不到 2 秒的時間內載入了 10,000 條記錄
- Innodb 是 MySQL 中可用的 2 個數據庫引擎之一。通常最好使用 Innodb,因為它提供行鎖定,這有助於防止並發更新錯誤等。在大多數情況下,MyISAM 的性能並不比 Innodb 快多少,除非我有理由,否則我不會使用它。
我會簡單地使用 excel2mysql 將 excel 數據導入您的 MySQL 數據庫,然後在伺服器上執行您的程序來進行計算。伺服器程序可以由許多不同的技術自動觸發。例如一個 http php 腳本。或者程序可以簡單地監視 MySQL 表的更新,然後採取行動。