# 建表语句 CREATE TABLE IF NOT EXISTS `price_history` ( `regionID` INT NOT NULL, `typeID` INT NOT NULL, `date` DATE NOT NULL, `lowPrice` DOUBLE NOT NULL, `highPrice` DOUBLE NOT NULL, `avgPrice` DOUBLE NOT NULL, `volume` INT NOT NULL, `orders` INT NOT NULL COMMENT 'regionID,typeID,date,lowPrice,highPrice,avgPrice,volume,orders', INDEX `regionID`(`regionID`), INDEX `typeID`(`typeID`), INDEX `date`(`date`), INDEX `lowPrice`(`lowPrice`), INDEX `highPrice`(`highPrice`), INDEX `avgPrice`(`avgPrice`), INDEX `volume`(`volume`), INDEX `orders`(`orders`) ) ENGINE = InnoDB DEFAULT CHARSET = UTF8MB4;
考虑到price字段使用FLOAT/DOUBLE类型会有精度问题(FLOAT 4个字节,有效数字6位;DOUBLE 8个字节,有效数字16位。)php
# 优化之后的建表语句,关于DECIMAL请参见 https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html CREATE TABLE IF NOT EXISTS `price_history` ( `regionID` INT NOT NULL, `typeID` INT NOT NULL, `date` DATE NOT NULL, `lowPrice` DECIMAL(17, 4) NOT NULL, `highPrice` DECIMAL(17, 4) NOT NULL, `avgPrice` DECIMAL(17, 4) NOT NULL COMMENT 'The max(highPrice) is 700,000,000,000', `volume` INT NOT NULL, `orders` INT NOT NULL COMMENT 'regionID,typeID,date,lowPrice,highPrice,avgPrice,volume,orders', INDEX `regionID`(`regionID`), INDEX `typeID`(`typeID`), INDEX `date`(`date`), INDEX `lowPrice`(`lowPrice`), INDEX `highPrice`(`highPrice`), INDEX `avgPrice`(`avgPrice`), INDEX `volume`(`volume`), INDEX `orders`(`orders`) ) ENGINE = InnoDB DEFAULT CHARSET = UTF8MB4;
接下来进行数据的导入,表空间占用累计为70223M。html
# 数据导入 LOAD DATA LOCAL INFILE '/root/priceHistory.txt' INTO TABLE price_history FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'; MySQL [eveonline_price]> LOAD DATA LOCAL INFILE '/root/priceHistory.txt' INTO TABLE price_history FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'; Query OK, 269257439 rows affected, 14686 warnings (5 hours 25 min 41.31 sec) Records: 269257439 Deleted: 0 Skipped: 0 Warnings: 14686
首先,从网上下载比较新的typeID文件,而后进行适当的处理:首先去掉第一和第二行,而后将空格分割的文件进行处理,以逗号进行分割。mysql
# 下载下来的文件保存为download.txt,处理后文件保存为typeID.txt with open('typeID.txt', mode='w', encoding="UTF-8") as out: for line in open('download.txt', mode='r', encoding="UTF-8"): line = re.sub(r'\s+', ' ', line).split() key= line[0] name = ' '.join(line[1:]) out.write(key + ',' + name + "\n")
创建typeid表web
# MySQL数据库字段支持大小写,可是底层一概转换成小写(typeID和typeid是同一字段) CREATE TABLE IF NOT EXISTS `typeid` ( `typeID` MEDIUMINT PRIMARY KEY, `typeName` VARCHAR(90) NOT NULL, INDEX `typeName`(`typeName`) ) ENGINE = InnoDB DEFAULT CHARACTER SET = UTF8MB4;
通过对文件的读取判断,typeName字段最长为78个字符,这里留90字符做为保留量。接下来进行数据的导入,sql
LOAD DATA LOCAL INFILE '/root/typeID.txt' INTO TABLE typeid FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
Importing market data into Excel,如何将市场数据导入Excelthinkphp
USING ESI WITH GOOGLE SHEETS,将ESI和Google Sheets配合使用数据库
Marketplace,CCP官方论坛交易市场优化
EVE Online Intelligence Data,Tools and data you need to succeed in EVE Onlinegoogle
EVE Trade,暂时不知道作什么用spa
EVE Online price history download link,大小
Development Blog,开发者日志
MySQL部分知识: