規格化現實卡桑德拉非規範化VS正常化
在我的數據庫我有以下這完全符合我的使用情況非規範化的表,我收到的數據非常快...
CREATE TABLE IF NOT EXISTS lp_webmap.link (
drank int,
prank int,
title text,
nofollow boolean,
created timestamp,
updated timestamp,
dst_ssl boolean,
dst_www boolean,
src_ssl boolean,
src_www boolean,
dst_domain_name1st text,
dst_domain_name2nd text,
dst_domain_name3rd text,
src_domain_name1st text,
src_domain_name2nd text,
src_domain_name3rd text,
dst_page text,
src_page text,
dst_page_title text,
src_page_title text,
src_domain_ownerreg text,
PRIMARY KEY (
(
dst_domain_name1st,
dst_domain_name2nd,
dst_domain_name3rd
),
created,
dst_page,
src_page,
src_domain_name1st,
src_domain_name2nd,
src_domain_name3rd
)
);
然而,該表中有數十億行,這對我們的硬件是一個問題。因此,鏈接表設計中的每個備用字節對我們都有很大的好處。
Normalized solution?
從應用程序鏈接表中的平均選擇包含十分之幾/幾百行。在最糟糕的情況下,選擇包含數千行。因此,它可能是(恕我直言)明智使用該表正常化的問題...
CREATE TABLE IF NOT EXISTS lp_webmap.page (
domain_name1st text,
domain_name2nd text,
domain_name3rd text,
location text,
title text,
rank int,
www boolean,
update_interval smallint,
updated timestamp,
PRIMARY KEY (
(domain_name1st, domain_name2nd, domain_name3rd, location),
updated, rank, update_interval
)
);
問題
如果我用標準化的鏈接和頁面表,我需要加入他們的應用程序。這不會是一個問題,但如何有效地從頁面表中選擇相應的行?我感覺到,從鏈接表中遍歷每個結果行並逐一選擇相應的頁面行是無效的。
我不太確定我是否理解你的問題。但是,如果您關心的是跨分區的邏輯行重複數據,那麼[靜態列](http://docs.datastax.com/en/cql/3.1/cql/cql_reference/refStaticCol.html)可以幫助您而不必更改整個表格佈局? – Ralf
@Ralf:就是這樣!順便說一下,這是關於靜態列的解釋性文章:https://blogs.infosupport.com/static-columns-in-cassandra-and-their-benefits/。非常感謝你。 – Michal