बहुत सारे बदलाव हुए जब मुझे अपना पहला उत्तर देना होगा तो मैं इसे शुरू कर दूंगा !!!
USE test
DROP TABLE IF EXISTS ngram_key;
DROP TABLE IF EXISTS ngram_rec;
DROP TABLE IF EXISTS ngram_blk;
CREATE TABLE ngram_key
(
NGRAM_ID UNSIGNED BIGINT NOT NULL AUTO_INCREMENT,
NGRAM VARCHAR(64) NOT NULL,
PRIMARY KEY (NGRAM),
KEY (NGRAM_ID)
) ENGINE=MyISAM ROW_FORMAT=FIXED PARTITION BY KEY(NGRAM) PARTITIONS 256;
CREATE TABLE ngram_rec
(
NGRAM_ID UNSIGNED BIGINT NOT NULL,
YR SMALLINT NOT NULL,
MC SMALLINT NOT NULL,
PC SMALLINT NOT NULL,
VC SMALLINT NOT NULL,
PRIMARY KEY (NGRAM_ID,YR)
) ENGINE=MyISAM ROW_FORMAT=FIXED;
CREATE TABLE ngram_blk
(
NGRAM VARCHAR(64) NOT NULL,
YR SMALLINT NOT NULL,
MC SMALLINT NOT NULL,
PC SMALLINT NOT NULL,
VC SMALLINT NOT NULL
) ENGINE=BLACKHOLE;
DELIMITER $$
CREATE TRIGGER populate_ngram AFTER INSERT ON ngram_blk FOR EACH ROW
BEGIN
DECLARE NEW_ID BIGINT;
INSERT IGNORE INTO ngram_key (NGRAM) VALUES (NEW.NGRAM);
SELECT NGRAM_ID INTO NEW_ID FROM ngram_key WHERE NGRAM=NEW.NGRAM;
INSERT IGNORE INTO ngram_rec VALUES (NEW_ID,NEW.YR,NEW.MC,NEW.PC,NEW.VC);
END; $$
DELIMITER ;
INSERT INTO ngram_blk VALUES
('rolando',1965,31,29,85),
('pamela',1971,33,21,86),
('dominique',1996,30,18,87),
('diamond',1998,13,28,88),
('rolando edwards',1965,31,29,85),
('pamela edwards',1971,33,21,86),
('dominique edwards',1996,30,18,87),
('diamond edwards',1998,13,28,88),
('rolando angel edwards',1965,31,29,85),
('pamela claricia edwards',1971,33,21,86),
('dominique sharlisee edwards',1996,30,18,87),
('diamond ashley edwards',1998,13,28,88);
UPDATE ngram_rec SET yr=yr+1,mc=mc+30,pc=pc+30,vc=vc+30;
INSERT INTO ngram_blk VALUES
('rolando',1965,31,29,85),
('pamela',1971,33,21,86),
('dominique',1996,30,18,87),
('diamond',1998,13,28,88),
('rolando edwards',1965,31,29,85),
('pamela edwards',1971,33,21,86),
('dominique edwards',1996,30,18,87),
('diamond edwards',1998,13,28,88),
('rolando angel edwards',1965,31,29,85),
('pamela claricia edwards',1971,33,21,86),
('dominique sharlisee edwards',1996,30,18,87),
('diamond ashley edwards',1998,13,28,88);
UPDATE ngram_rec SET yr=yr+1,mc=mc+30,pc=pc+30;
INSERT INTO ngram_blk VALUES
('rolando',1965,31,29,85),
('pamela',1971,33,21,86),
('dominique',1996,30,18,87),
('diamond',1998,13,28,88),
('rolando edwards',1965,31,29,85),
('pamela edwards',1971,33,21,86),
('dominique edwards',1996,30,18,87),
('diamond edwards',1998,13,28,88),
('rolando angel edwards',1965,31,29,85),
('pamela claricia edwards',1971,33,21,86),
('dominique sharlisee edwards',1996,30,18,87),
('diamond ashley edwards',1998,13,28,88);
UPDATE ngram_rec SET yr=yr+1,mc=mc+30;
SELECT * FROM ngram_key;
SELECT * FROM ngram_rec;
SELECT A.ngram NGram,B.yr Year,B.mc Matches,B.pc Pages,B.vc Volumes FROM
ngram_key A,ngram_rec B
WHERE A.ngram='rolando angel edwards'
AND A.ngram_id=B.ngram_id;
वर्ष की जानकारी के लिए बहुत छोटी टेबल लेकिन मूलग्राम को संरक्षित करने के लिए बहुत बड़ी चाबियां। मैंने परीक्षण डेटा की मात्रा भी बढ़ाई। आप इसे सीधे MySQL में काट और पेस्ट कर सकते हैं।
चेतावनी
बस ROW_FORMAT को हटा दें और यह डायनामिक हो जाता है और ngram_key टेबल को बहुत छोटा कर देता है।
डिस्कस्पेस मेट्रिक्स
nrgram_rec में ngram_id के
लिए 8 बाइट्स प्रति पंक्ति 17 बाइट्स हैं (अधिकतम अहस्ताक्षरित मान 18446744073709551615 [2 ^ 64 - 1])
4 बाइट्स के लिए 8 बाइट्स (2 बाइट्स प्रत्येक
1 बाइट MyISAM आंतरिक हटाएं ध्वज
Ngram_rec = 10 बाइट्स (8 (ngram_id) + 2 (yr) के लिए अनुक्रमणिका प्रविष्टि
47 मिलियन पंक्तियाँ X 17 बाइट्स प्रति पंक्ति = 0799 मिलियन बाइट्स = 761.98577 MB
47 मिलियन पंक्तियाँ X 12 बाइट्स प्रति पंक्ति = 0564 मिलियन बाइट्स = 537.85231 MB
47 मिलियन पंक्तियाँ X 29 बाइट्स प्रति पंक्ति = 13 मिलियन मिलियन बाइट्स = 1.269393 GB
5 बिलियन पंक्तियाँ X 17 बाइट्स प्रति पंक्ति = 085 बिलियन बाइट्स = 079.1624 GB
5 बिलियन रोएँ X 12 बाइट्स प्रति पंक्ति = 060 बिलियन बाइट्स = 055.8793 GB
5 बिलियन पंक्तियाँ X 29 बाइट्स प्रति पंक्ति = 145 बिलियन बाइट्स = 135.0417 GB
ngram_key में ngram के लिए 73 बाइट्स 64 बाइट्स हैं (ROW_FORMAT = FIXED set varchar to char) 8 बाइट्स के लिए ngram_id 1 बाइट MyISAM आंतरिक डिलीट फ्लैग
Ngram_key = 64 बाइट्स + 8 बाइट्स = 72 बाइट्स के लिए 2 सूचकांक प्रविष्टियाँ
47 मिलियन पंक्तियों X 073 बाइट्स प्रति पंक्ति = 3431 मिलियन बाइट्स = 3.1954 GB
47 मिलियन पंक्तियों X 072 बाइट्स प्रति पंक्ति = 3384 मिलियन बाइट्स = 3.1515 GB
47 मिलियन पंक्तियों X 145 बाइट्स प्रति पंक्ति = 6815 मिलियन बाइट्स = 6.3469 GB
5 बिलियन पंक्तियाँ X 073 बाइट्स प्रति पंक्ति = 365 बिलियन बाइट्स = 339.9327 GB
5 बिलियन रोएँ X 072 बाइट्स प्रति पंक्ति = 360 बिलियन बाइट्स = 335.2761 GB
5 बिलियन पंक्तियाँ X 145 बाइट्स प्रति पंक्ति = 725 बिलियन बाइट्स = 675.2088 GB