Mysql

設計帶有未來列的文件註釋表

  • May 3, 2016

我正在開發一個 Web 應用程序,該應用程序允許學生/研究人員PDF通過(手動)計算有趣的現象來淺顯地註釋文件。目前,這些現像一共有大約 45 種,其中大部分是標稱值、布爾值或整數。數據庫是 MySQL 數據庫,文件數量在 100 到 500 之間,所以數據庫很小。

該應用程序將這些文件及其各自的註釋添加到一個語料庫中,該語料庫也將是可搜尋的(並且可基於這些現象的一個大子集進行過濾)。

將來可能會添加一些現象,或者通過自動標記等方式禁用或自動化現有的現象。

這可以通過例如:

  1. 通過 Web 應用程序更改表格和添加列

最終表格可能會變得太大(按列),但它很容易實現,即使擁有 60 列的表格看起來很笨拙。我不確定它是否像看起來那樣低效。

2.將web應用的註解部分儲存在外部

例如,作為 JSON 文件或在MongoDB等非關係型數據庫中。這在直覺上是有道理的,因為我提出了對註釋的靈活(因此是非關係/無模式)解決方案的需求。但是將兩個數據庫連接在一起可能會不必要地增加應用程序的複雜性。此外,以這種方式使用外鍵可能變得不可能(?)。

  1. 將註釋作為一個儲存blob在 MySQL 列中

我幾乎沒有使用 blob 的經驗,因為我一直避免使用它們。我在另一個問題中閱讀了它

  1. 在 MySQL 數據庫的 EAV 表中儲存所有/新屬性

似乎是一種模仿關係數據庫中非關係行為的 hacky 方式。我還讀到它可能會導致性能問題。

我想就哪種方法更好或者是否有完全不同的東西我應該看看一些建議。

JSON 文件非常適合此目的。MySQL 可以通過其 JSON 數據類型儲存 JSON 文件,並且它具有多種功能來提取此類文件中的資訊。但是,MySQL 目前沒有一種有效的本地方式來索引 JSON 文件以進行快速搜尋。Google搜尋“mysql json index”將呈現幾種策略,一些使用觸發器和外部表,另一些使用計算列上的索引。

然而,PostgreSQL 對 JSON 數據類型有很好的支持,包括索引、將文件打開為記錄集(使用 LEFT JOIN LATERAL 結合jsonb_each非常強大),以及支持 JSON 文件的 GIN 索引(用於標籤和內容)。除非您已經對 MySQL 進行了大量投資,否則 PostgreSQL 將是您應用程序的絕佳選擇。或者,如果您僅將 MongoDB 用於此目的,您可能需要考慮使用 PostgreSQL 而不是 MongoDB。此外,PostgreSQL 可以通過 Foreign Data Wrappers 輕鬆訪問 MySQL 表,它對正則表達式文本操作有很好的支持,並且您可以使用 pl/perl 儲存過程通過標準 perl 庫對 JSON 文件進行各種魔術。

引用自:https://dba.stackexchange.com/questions/136242