2013-07-19 26 views
4

將異構json字符串存儲到同一個MySQL表的推薦方法是什麼? 我在這個MySQL數據庫中有一些存儲除JSON對象以外的信息的其他表,因此我想以最佳推薦的方式將這些JSON對象存儲在同一個數據庫中。在同一個MySQL表中存儲異構json對象?

我想將json字符串從Perl腳本存儲到一個MySQL表中,該表不僅具有相同的值,而且在不同的json對象中將具有不同的層次結構。我正在考慮將它們存儲爲字符串或blob,以及每個條目的一些最小元數據。例如:

CREATE TABLE `entry` (
    `entry_id`    int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `file`     varchar(1023) DEFAULT NULL, 
    `json`     blob    DEFAULT NULL, 
    `update_timestamp`  TIMESTAMP  DEFAULT CURRENT_TIMESTAMP, 

    PRIMARY KEY (`entry_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; 

在我使用Perl和MySQL直接執行此操作之前,是否有任何工具或庫需要考慮?我想知道是否有什麼東西可以與DBIx :: JSON爲MySQL的SELECT查詢所做的相反...

+0

你應該考慮一些非關係型數據庫,而不是(他們大多鍵操作價值對概念),而不是使用blob。 – DVK

+0

@DVK我在這個MySQL數據庫中有一些存儲除JSON對象之外的信息的其他表,所以我想以最好的方式將這些JSON對象存儲在同一個數據庫中。 – 719016

+1

您可能想考慮爲您已序列化爲JSON的數據中的至少一部分實現某種ORM;正如Karoly在他的回答中指出的那樣,除非您希望能夠跨串行化數據進行查詢,否則這種方法可以正常工作,在這種情況下,您將會非常不幸。 –

回答

5

在數據庫中的Json對象是非常好的,直到你不想查詢它。

然而存儲類型值得討論。我將使用(ROW_FORMAT = COMPRESSED KEY_BLOCK_SIZE = 8)壓縮InnoDB中的整個ROW,或者在應用程序中壓縮僅JSON並將其放入二進制格式。

第一個選項(應用程序處理TEXT,MySQL處理壓縮),我更喜歡按文本類型(TEXT,LONGTEXT,MEDIUMTEXT,TINYTEXT)的json列。第二個版本(應用程序處理壓縮,MySQL只能看到二進制文件)我當然會使用blob格式(TINYBLOB,BLOB,MEDIUMBLOB或LONGBLOB)。

這兩個都是有效的選項。這真的取決於你的個人優先事項。將壓縮轉移到應用程序是縮放更容易但帶來複雜性的好處。讓MySQL處理壓縮是透明的,並且易於設置,但是它給CPU帶來了一些壓力(這很少成爲數據庫的瓶頸)。

相關問題