剛開始寫博客不足之處望大家多多指點,少一些質疑多一些幫助,我們就能成為朋友。
上一篇:《.NET程序員我是如何通過一個產品在2年內買車買房》有很多同為程序員的小伙伴們給我留言,從整體的留言中我能看到有很多迷茫的小伙伴活在上班拿工資的夾縫中,首先能掙到外快固然是好,如沒有掙到還是努力把自己的事做好,成功並非都是順理成章而是偶然,能通過從事技術這份工作抓住機會才是你職場中應該學的,比如:你的每一任老板都是一個商機,他是怎么做的你也可以這樣做,為什么不能,應該是執行力不夠,上一篇我也講到過我通過自媒體平台連續每天發文長達2-3個月,其中這個過程就是一個漫長而又頭疼的事,首先每天的文章該怎么寫就單單這一件事都足以讓你放棄100次。
本文大綱:
- 1.我熱衷技術但我更傾向於技術變現
- 2.代碼可以copy發現商機的方式也可以copy
- 3.具體執行細節
- 4.我的第二款產品現在正在這樣做,不信你搜搜看
1.我熱衷技術但我更傾向於技術變現
要想技術變現就必須廣而告之,你做的再好沒人知道,賣不出去也是一堆廢代碼,因為沒有價值(錢),這里並非否認技術沒價值,而是要讓技術變的更有價值,讓自己更有動力去學習技術,然后通過技術變現,通過技術在遇到實際情況的時候去解決,讓問題去驅動學習,而不是學而不用,最后淪落成為紙上談兵。
以下是我在解決投票系統慢、卡上面關於數據庫的一些優化,有可能你並沒有遇到過該問題,但是我遇到了並且總結成經驗告訴你,這就叫經驗分享,我把他整理成測試案例使你更能看明白。
一:引擎的選擇
- 為自己創造問題環境並去解決。如需要測試MySql表大數據量情況下如何優化,首先第一步你會說我這里沒有這么多數據如何去優化,我可以告訴你如何快速生成百萬千萬數據量的最簡單方法。
-
insert into `user`(phone,`name`,headimg,sex,addtime) select phone,`name`,headimg,sex,now() from `user`
以上sql語句是快速復制插入表數據,意思是從user表中查詢數據並插入到user表中(也可以是另外一張表如user2)。如數據表中起始只有1條數據的話,那么執行17次13萬多數據、19次52多萬數據、20次100多萬數據、21次200多萬數據、22次400多萬數據,每執行一次就在上一次基礎上翻倍。以上sql語句是最簡單不過的一條語句,不用寫(來給自己增加能讓你放棄創造問題環境難度的語句)什么循環之類的語句,你只用按鼠標左鍵執行個10幾次即可。
-
select substring(MD5(RAND()),1,20);#隨機生成20位字符串 select CEIL(RAND()*100000000000);#隨機生成最多11位數字
- 以上查詢小技巧奉上,可能你會用到
- 其中數據庫表引擎是:MyISAM 和 InnoDB 查詢對比,user(MyISAM引擎)和user3(InnoDB引擎)表數據都是400多萬,且數據都是一模一樣
-
1.使用count(*)方式查詢差距對比
#引擎是:InnoDB select count(*) from `user3`; 平均查詢時間:1.6秒 ~ 1.8秒 #引擎是:MyISAM select count(*) from `user`; 平均查詢時間:0.000秒 ~ 0.001秒2.使用count(*) 和 count(id)方式查詢差距對比
#引擎是:InnoDB select COUNT(*) from `user3`; select COUNT(id) from `user3`; #其中count(*)的方式要快於count(id)差不多0.1秒 ~ 0.5秒 #引擎是:MyISAM select COUNT(*) from `user`; select COUNT(id) from `user`; #其中count(*)和count(id)差距在0.000秒 ~ 0.001秒3.使用like方式查詢差距對比
#引擎是:InnoDB select * from `user3` WHERE `name` like 'b981%'; #平均查詢時間:2.8秒 ~ 3.068秒 #引擎是:MyISAM select * from `user` WHERE `name` like 'b981%'; #平均查詢時間:0.959秒
4.使用帶分頁方式查詢差距對比
#引擎是:InnoDB select * from `user3` WHERE `name` like 'b981%' limit 1,10; #平均查詢時間:0.5秒 #引擎是:MyISAM select * from `user` WHERE `name` like 'b981%' limit 1,10; #平均查詢時間:0.1秒以下是InnoDB和MyISAM引擎的使用場景說明
-
InnoDB存儲(默認引擎):對事務要求高,保存的數據都是重要數據,可以考慮使用InnoDB引擎,比如訂單表,賬號表
- MyISAM存儲:如表對事務要求不高,同時以查詢和添加為主,可以考慮使用MyISAM引擎
二:數據表分區
知識點說明:投票系統使用的HASH方式進行分區的,使用HASH方式好處:當插入數據時,根據id把數據平均散到各個分區上,由於文件小,效率高,更新操作變得更快。
其他更多的分區可以查看http://tool.oschina.net/uploads/apidocs/mysql-5.1-zh/partitioning.html#partitioning-types
1.創建帶有分區的表,最后一句代碼就是創建HASH分區:PARTITION BY HASH (id) PARTITIONS 10
CREATE TABLE `user4` ( `id` int(11) NOT NULL AUTO_INCREMENT, `phone` varchar(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 PARTITION BY HASH (id) PARTITIONS 10;
重點:要使用分區表必須要在創建表的時候就設置好
問題:但是表最開始沒有創建分區該怎么辦?第一步:將表結構代碼導出,在最后加上分區代碼PARTITION BY HASH (id) PARTITIONS 10,創建一個新臨時表。第二步:使用查詢並插入的語句進行同步數據到新表,同步完成將臨時表表名改成正式表名,將原來表刪除或者換一個新名字。當你在插入數據的時候就自動給你進行了分區。分區表建立好之后下面我們就進行查詢分析對比。
將數據同步到分區表(user4)
insert into `user4`(phone,`name`,headimg,sex,addtime) select phone,`name`,headimg,sex,now() from `user`
#執行插入時間只有12.526秒,如果未分區插入需要30多秒
1.使用count(*)方式查詢差距對比,加了HASH分區直接秒殺前兩者
#引擎是:InnoDB select count(*) from `user3`; #平均查詢時間:1.6秒 ~ 1.8秒 #引擎是:MyISAM select count(*) from `user`; #平均查詢時間:0.000秒 ~ 0.001秒 #引擎是:MyISAM+HASH分區 select COUNT(*) from `user4` #平均查詢時間:0.000秒
2.使用count(*) 和 count(id)方式查詢差距對比,加了HASH分區直接秒殺前兩者
#引擎是:MyISAM+HASH分區 select COUNT(*) from `user4`; select COUNT(id) from `user4`; #平均查詢時間:0.000秒
3.使用like方式查詢差距對比,沒有加HASH分區的表要快加了HASH分區表那么一丟丟,你知道為什么嗎,留言回復?
#引擎是:MyISAM select * from `user` WHERE `name` like 'b981%'; #平均查詢時間:0.827秒 #引擎是:MyISAM+HASH分區 select * from `user4` WHERE `name` like 'b981%'; #平均查詢時間:0.976秒
以上兩個知識點解決了投票系統很大一部分慢卡的問題,其實也沒有什么高大上,還是那一句話:適合自己的才是最好的。當系統更流暢客戶用的更順心你向他要點錢都是分分鍾的事。
2.代碼可以copy發現商機的方式也可以copy
首先你要弄清楚你所做的產品賣點在哪里?如何找到賣點(商機)?
方式一:我是通過做定制開發,找我開發同一個產品的人多,就代表這個事有價值。
方式二:你所任職的公司在做什么事,你們公司所做的這款產品就是賣點(這里不說大廠如BAT),把公司這款產品翻版一份min版本調整價格,通過在網上發軟文(你完全可以去網上找,上一篇文章也說過怎么找),起碼至少2-3個月的軟文努力才有效果,如果沒有這個毅力那么最開始就不要想着去翻版。
方式三:例如:微擎的應用商店、豬八戒的排名前幾的服務商點進去看他們什么產品賣的好,這些都是商機,挑選一個在你能力范圍內的產品進行翻版。
3.具體執行細節
- 通過以上方式找准商機然后就開始開發產品
- 建立產品宣傳的官網讓你的產品更正式,官網主要用於宣傳產品的賣點和介紹產品的使用。
- 搜集友商的軟文進行修改,主要修改成自己的產品信息,然后每天定時發送
- 每天將新聞發布到:官網、搜狐自媒體平台(推薦)、豆瓣、簡書、貼吧
- 每天在友商軟文下進行軟留言(帶有自己產品的關鍵字)
- 如有客戶找上門要有一套說法,每次將客戶單獨拉入一個群聊,群內最好除了客戶之外要有2人(你+售前也可以自己多個號),你想想只有2個人的不叫群聊那叫尬聊
- 准備好合同,如入住了平台,平台方則擔任擔保。
4.我的第二款產品現在正在這樣做,不信你搜搜看
你可以試着搜一搜:玩具租賃,就第一頁里面的內容(除了頭部百度的廣告外)你都點進去要么是我的產品宣傳官網,要么是友商的軟文(底下肯定有我的產品留言)。