說到維基百科 不得談到一個組織 — 維基媒體wikimedia。php
企業家吉米·威爾士和軟件設計師拉里·桑格創立了維基百科(wikipedia),於2001年1月15日發佈,目標是向全人類提供自由的百科全書。最初資助的維基百科是由企業家威爾士的一家我的公司提供資助,隨着維基百科的人氣直線上升,須要消耗的資金愈來愈多,已經沒法提供足夠的錢維持維基百科的發展。創始人們決定以慈善模式運營維基百科。因而 維基媒體基金會(wikimedia foundation)應運而生。時間點-2003年6月20日。html
維基媒體基金會託管了維基百科,併發布了維基媒體運動(wikimedia movement)即:一系列組織和活動基於共享價值觀圍繞維基媒體的網站和項目進行運轉。得到了衆多有情懷的公司以及我的的資助,包括,谷歌,亞馬遜,巴菲特等等。node
wikimedia擁有衆多項目,包括維基百科,維基新聞,維基圖書館,維基物種等等。其中一個是維基百科所使用的基礎軟件 mediawiki。web
MediaWiki採用PHP編程語言寫成,使用MySQL、MariaDB等關係數據庫管理系統。MediaWiki軟件最初是爲維基百科開發的,目前維基媒體基金會的全部項目乃至衆多wiki網站皆採用了這一軟件。咱們複製維基百科的關鍵。數據庫
最好採用最新1.31 不然擴展插件安裝比較麻煩apache
www.mediawiki.org/wiki/Manual…編程
記得勾選上擴展程序和圖像和文件上傳-啓用即時共享資源api
web server:apache or iis瀏覽器
PHP version 7.0.0 or later服務器
Database Server, one of the following:
文件 LocalSettings.php包括用戶權限,網站名稱,標誌,數據庫配置,文件上傳路徑,網站語言 等默認配置,插件相關配置加在LocalSettings.php 末尾。
重要配置:
/maintenance/exportDump.php
/maintenance/importDump.php
查看已經安裝插件:https://yourwiki/wiki/Special:Version
個別插件須要使用到數據庫建立表,運行update.php 會讀取配置問文件,更新表結構
維基百科各個語言是單獨的一個mediawiki實例,爲了能協同工做,提出了wiki family 的概念。
能夠共享插件
www.mediawiki.org/wiki/Manual…
WikiText是一種輕量級標記語言,相似於markdown,用於撰寫Wiki網頁,它在HTML基礎上進行簡化,使不會使用html的人也能寫出格式清晰好看的頁面,最終是由mediawiki轉換成HTML,由瀏覽器進行渲染。
meta.wikimedia.org/wiki/Help:W…
mediawiki提供管理組織公共內容的基本結構,爲了區分詞條,用命名空間加冒號:來區分。
查看方式Help:Namespaces
(Main/Article) namespaces 編號爲0,搜索的時候沒必要輸入任何命名空間,也就是咱們正常所說的詞條
Template:{{templateName|arguments}}www.mediawiki.org/wiki/Help:T…
Category:類別 是一個集合(相似於月份)commons.wikimedia.org/wiki/Catego…
Module:lua腳本,加強Template 實現更復雜的功能
Project: 不是百科全書的一部分,記錄政策和指南
Special:mediawiki特殊功能,好比導入導出等工具,報告等等
維基會常常會發布一些備份文件的轉儲提供給須要的人。網址:dumps.wikimedia.org/
提供內容包括:
根據須要下載指定語言的備份文件,有時候常常出現Template或者Mudule等數據不全。因此最好也下載commons的備份文件。
默認單個插入語句不能超過1M,英文詞條比較大,修改成64M
SET GLOBAL max_allowed_packet = 64M;
修改最大鏈接數,提升插入效率
SET GLOBAL max_connections = 500;
在my.cnf中
修改數據庫最大核心數和innodb緩衝池大小
thread_concurrency = 32 innodb_buffer_pool_size = 1024M
默認100 ,部分插件會棧溢出
/etc/php.ini文件
在最後加上xdebug.max_nesting_level = 600
下好備份文件後,使用mediawiki自帶的導入工具導入。
php /var/www/html/wiki/maintenance/importDump.php < /home/yuwenhao/wikidumps/data/Category.xml
單個進程速度很慢,將大文件拆分,而後批量插入
將文件按照namespace拆分
_1_extract_namespaces_from_wikitext.py
包裹插入必需要的標籤
_2_wrap_mediawiki_for_page.py
按照將xml拆分紅指定個數,幷包裹插入必需要的標籤
_3_split_big_xml_for_import_dump.py
批量執行插入,日誌爲相同目錄相同名稱 *.log
_4_run_all_mediawiki_dump_file.py
確保磁盤空間足夠,在導入過程當中若是空間不夠,wikitext會清空一些表,以保證插入。
可能遇到的坑:
mediawiki官方團隊推出的html<-->wikitext互轉應用,基於nodejs。
www.mediawiki.org/wiki/Parsoi…
注意在配置文件中配置mediawiki的api URL
115.231.226.254
32個邏輯CPU 64G內存
200個線程 20次循環
8.2個每秒
清洗parsoid原始數據