2014-10-07 48 views
0

之前已經討論過這個問題,但我還沒有遇到明確的答案,它只是粗略地描述爲火和水,並留在那裏(來自我的研究)。與非關係(MySQL和MongoDB)的混合關係

關係和無關係數據庫是非常不同的,但它們都拉數據,對於我的項目,我打算使用無關係數據庫,但是這將安裝在許多地方,有些只能訪問MySQL(後來移動)。

那麼有可能迫使MySQL進入一種無關係模式?我已經使用了一種模仿它的模式,但它仍然保留着迄今爲止我無法克服的關係數據庫方面(過分依賴於ID等等,導致語法/數據結構混亂)。

那麼有沒有一個魔術圖書館會做到這一點?

這裏是我的數據庫架構的一個大概的輪廓:

1臺是「元」及其包含的ID,類型和日期等一起,共同搜索是普遍的基本領域。

1個包含「數據」的表,每個「列」有多行。它不能通過一個連接來完成,所以它的兩個查詢來獲取數據。

CREATE TABLE `meta` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `type` varchar(255) NOT NULL, 
    `state` tinyint(3) NOT NULL DEFAULT '0', 
    `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; 

CREATE TABLE `data` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `meta_id` int(11) unsigned NOT NULL DEFAULT '0', 
    `index` varchar(255) NOT NULL, 
    `value` longtext NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; 

正如你可以看到不容易搜索,除非它通過ID /日期什麼的,還需要PHP佔用了大量鬆弛的順序和這樣的。不是我真正擔心的,而是要做一個真正的搜索,它需要轉儲整個數據庫,並通過它咀嚼.....

什麼樣的MySQL模式(或概念)可以最好地複製無關係模型(並仍然合理地處理搜索)?

+0

如果存在這樣一個魔術開關,那麼除了MySQL – 2014-10-07 21:54:22

+0

之外不需要任何數據庫,如果您願意,可以使用mysql作爲啞數據存儲系統。沒有什麼東西需要你擁有多個表,外鍵等......如果你願意,你可以有一個單一的字段/單個表/單個模式,將整個系統存儲爲一個不透明的blob。但是接下來的問題就變成了「爲什麼還要用數據庫開始呢?」 – 2014-10-07 21:55:53

+0

它或多或少的向後兼容性。我使用的數據是非常動態的,它幾乎不可能正確使用mysql。我真的被困在一塊石頭和一個堅硬的地方之間......這個......大聲笑。我打算緩存它,但我也明白,它的性能可能也不足。 – 2014-10-07 21:58:16

回答

2

首先,沒有魔法這樣的東西。

您已重新設計了Entity-Attribute-Value設計。這是一個非關係設計。 I've written about this before,但簡而言之:您最終必須在應用程序代碼中實現您在RDBMS中認爲理所當然的許多功能,如約束和數據類型。

這是關係到Inner-Platform Effect的概念:

的內部平臺的影響是設計一個系統是如此定製的,它最終成爲平臺的它被設計爲一個貧窮的副本的結果。這種動態內部平臺的「定製」變得如此複雜,只有程序員(而不是最終用戶)才能修改它。

如果這是您想花時間去做的工作類型,那就去做吧。

我的首選是將MySQL用於關係數據,並將非關係數據存儲用於非關係數據。可以從同一應用程序訪問這兩個數據庫。

它只是粗略地描述爲火和水,並留在那裏(從我的研究)。

我覺得它更像火和棉花糖。如果你知道自己在做什麼,那麼你就可以成爲世界上最好的享受之一。或者你最終可能會拿着一根被燒焦,粘糊糊的棒子。

+0

非常好的解釋和參考。 – 2014-10-07 23:04:46