小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

使用mysql處理非常大的數(shù)據(jù)

 印度阿三17 2019-09-28

對不起,很長的帖子!

我有一個包含~30個表(InnoDB引擎)的數(shù)據(jù)庫.這些表中只有兩個,即“事務(wù)”和“移位”非常大(第一個有150萬行,移位有23k行).現(xiàn)在一切正常,我沒有當(dāng)前數(shù)據(jù)庫大小的問題.

但是,我們將擁有一個類似的數(shù)據(jù)庫(相同的數(shù)據(jù)類型,設(shè)計,…),但更大,例如,“交易”表將有大約10億條記錄(每天約2,300萬筆交易),我們正在思考如何我們應(yīng)該在MySQL中處理這么大量的數(shù)據(jù)? (這是讀寫密集型).我閱讀了很多相關(guān)帖子,看看Mysql(更具體地說是InnoDB引擎)是否可以與數(shù)十億條記錄表現(xiàn)良好,但我仍然有一些問題.我讀過的一些相關(guān)帖子如下:

> Can MySQL reasonably perform queries on billions of rows?
> Is InnoDB (MySQL 5.5.8) the right choice for multi-billion rows?
> Best data store for billions of rows
> How big can a MySQL database get before performance starts to degrade
> Why MySQL could be slow with large tables?
> Can Mysql handle tables which will hold about 300 million records?

到目前為止我已經(jīng)理解為提高非常大的表的性能:

>(對于innoDB表,這是我的情況)增加innodb_buffer_pool_size(例如,高達(dá)80%的RAM).
另外,我發(fā)現(xiàn)了一些其他MySQL性能調(diào)整設(shè)置here in
percona blog

>在表上有適當(dāng)?shù)乃饕?在查詢中使用EXPLAN)
>分區(qū)表
> MySQL Sharding或群集

這是我的問題/困惑:

>關(guān)于分區(qū),我懷疑是否應(yīng)該使用它.一方面,許多人建議在桌子非常大時提高性能.另一方面,我閱讀了許多帖子,說它不會提高查詢性能,也不會使查詢運(yùn)行得更快(例如,herehere).另外,我在MySQL Reference Manual讀到InnoDB外鍵和MySQL分區(qū)不兼容(我們有外鍵).
>關(guān)于索引,現(xiàn)在它們表現(xiàn)良好,但據(jù)我所知,對于非常大的表索引更具限制性(正如Kevin Bedell在他的回答here中提到的).此外,索引加速讀取,同時減慢寫入(插入/更新).那么,對于我們將擁有這個大型數(shù)據(jù)庫的新類似項目,我們應(yīng)該首先插入/加載所有數(shù)據(jù)然后創(chuàng)建索引嗎? (加快插入速度)
>如果我們不能對我們的大表(“事務(wù)”表)使用分區(qū),那么提高性能的另一種選擇是什么? (除了MySQl變量設(shè)置,例如innodb_buffer_pool_size).我們應(yīng)該使用Mysql集群嗎? (我們也有很多連接)

編輯

這是名為“transaction”的最大表的show create table語句:

  CREATE TABLE `transaction` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `terminal_transaction_id` int(11) NOT NULL,
 `fuel_terminal_id` int(11) NOT NULL,
 `fuel_terminal_serial` int(11) NOT NULL,
 `xboard_id` int(11) NOT NULL,
 `gas_station_id` int(11) NOT NULL,
 `operator_id` text NOT NULL,
 `shift_id` int(11) NOT NULL,
 `xboard_total_counter` int(11) NOT NULL,
 `fuel_type` int(11) NOT NULL,
 `start_fuel_time` int(11) NOT NULL,
 `end_fuel_time` int(11) DEFAULT NULL,
 `preset_amount` int(11) NOT NULL,
 `actual_amount` int(11) DEFAULT NULL,
 `fuel_cost` int(11) DEFAULT NULL,
 `payment_cost` int(11) DEFAULT NULL,
 `purchase_type` int(11) NOT NULL,
 `payment_ref_id` text,
 `unit_fuel_price` int(11) NOT NULL,
 `fuel_status_id` int(11) DEFAULT NULL,
 `fuel_mode_id` int(11) NOT NULL,
 `payment_result` int(11) NOT NULL,
 `card_pan` text,
 `state` int(11) DEFAULT NULL,
 `totalizer` int(11) NOT NULL DEFAULT '0',
 `shift_start_time` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `terminal_transaction_id` (`terminal_transaction_id`,`fuel_terminal_id`,`start_fuel_time`) USING BTREE,
 KEY `start_fuel_time_idx` (`start_fuel_time`),
 KEY `fuel_terminal_idx` (`fuel_terminal_id`),
 KEY `xboard_idx` (`xboard_id`),
 KEY `gas_station_id` (`gas_station_id`) USING BTREE,
 KEY `purchase_type` (`purchase_type`) USING BTREE,
 KEY `shift_start_time` (`shift_start_time`) USING BTREE,
 KEY `fuel_type` (`fuel_type`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1665335 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT

謝謝你的時間,

解決方法:

> MySQL可以合理地對數(shù)十億行執(zhí)行查詢嗎? – MySQL可以“處理”數(shù)十億行. “合理”取決于查詢;讓我們看看他們.
> InnoDB(MySQL 5.5.8)是數(shù)十億行的正確選擇嗎? – 5.7有一些改進(jìn),但5.5是相當(dāng)不錯的,盡管已經(jīng)將近6 8歲,并且即將不再受到支持.
>數(shù)十億行的最佳數(shù)據(jù)存儲 – 如果您的意思是“引擎”,那么InnoDB.
>在性能開始降低之前,MySQL數(shù)據(jù)庫有多大 – 再次,這取決于查詢.我可以告訴你一個會崩潰的1K行表;我曾與數(shù)十億行表一起工作.
>為什么MySQL可能會因大表而變慢? – 范圍掃描導(dǎo)致I / O,這是緩慢的部分.
> Mysql可以處理將容納約3億條記錄的表嗎? – 再次,是的.限制大約是一萬億行.
>(對于innoDB表,這是我的情況)增加innodb_buffer_pool_size(例如,高達(dá)80%的RAM).此外,我在percona博客中找到了一些其他MySQL性能調(diào)整設(shè)置 – 是的
>在表上有適當(dāng)?shù)乃饕?在查詢中使用EXPLAN) – 好吧,讓我們看看它們.在這個關(guān)鍵領(lǐng)域可以犯很多錯誤.
>分區(qū)表 – “分區(qū)不是靈丹妙藥!”我在my blog上豎起了這個
> MySQL Sharding – 目前這是DIY
> MySQL集群 – 目前最好的答案是一些基于Galera的選項(PXC,MariaDB 10,DIY w / Oracle). Oracle的“組復(fù)制”是一個可行的競爭者.
>分區(qū)不支持FOREIGN KEY或“全局”UNIQUE.
> UUID,就你所說的規(guī)模而言,不僅會減慢系統(tǒng)速度,還會實際殺死它. Type 1 UUIDs可能是一種解決方法.
>插入和索引構(gòu)建速度 – 提供單個答案的變化太多.讓我們看看您的暫定CREATE TABLE以及您打算如何提供數(shù)據(jù).
>很多連接 – “規(guī)范化,但不要過度規(guī)范化”.特別是,不要標(biāo)準(zhǔn)化日期時間或浮點(diǎn)數(shù)或其他“連續(xù)”值.
>建立summary tables
>每天2,300萬筆交易 – 如果是2.3M插入(30 /秒),則沒有太大的性能問題.如果更復(fù)雜,則可能需要RAID,SSD,批處理等.
>處理這樣的數(shù)據(jù)量 – 如果大多數(shù)活動都是“最近”行,那么buffer_pool將很好地“緩存”活動,從而避免I / O.如果活動是“隨機(jī)”,則MySQL(或其他任何人)將遇到I / O問題.
>縮小數(shù)據(jù)類型有助于像您這樣的表格.我懷疑你是否需要4個字節(jié)來指定fuel_type.有多個1字節(jié)方法.

來源:https://www./content-2-472651.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多