谁去过顽皮,谁去过尼斯? 圣诞老人为您提供Java 11建议!
有沒(méi)有想過(guò)圣誕老人如何為世界各地的孩子們送上節(jié)日禮物? 有20億個(gè)孩子,每個(gè)孩子都有自己的愿望清單,他會(huì)在24小時(shí)內(nèi)完成。 這意味著每個(gè)孩子平均需要43微秒,他需要檢查每個(gè)孩子是否頑皮或好。
您無(wú)需再懷疑了。 我會(huì)透露這個(gè)秘密。 他正在使用Java 11和具有超快執(zhí)行速度的現(xiàn)代流ORM。
盡管Santa的后備數(shù)據(jù)庫(kù)既舊又慢,但他仍可以使用標(biāo)準(zhǔn)Java流和JVM內(nèi)存技術(shù)來(lái)分析數(shù)據(jù)(微秒)。 圣誕老人的數(shù)據(jù)庫(kù)包含兩個(gè)表。 Child持有每一個(gè)孩子的世界, HolidayGift指定可用于生產(chǎn)圣誕老人的車間的所有項(xiàng)目。 一個(gè)孩子只能有一個(gè)愿望,例如哈希規(guī)則。
以流查看數(shù)據(jù)庫(kù)
Speedment是一種基于流的現(xiàn)代ORM,它能夠?qū)㈥P(guān)系數(shù)據(jù)庫(kù)表視為標(biāo)準(zhǔn)Java流。 眾所周知,只有好孩子才能得到禮物,因此區(qū)分頑皮的孩子和善良的孩子很重要。 使用以下代碼可以輕松完成此操作:
var niceChildren = children.stream().filter(Child.NICE.isTrue()).sorted(Child.COUNTRY.comparator()) .collect(Collectors.toList());該流將產(chǎn)生一長(zhǎng)串列表,其中僅包含一直很好的孩子。 為了使圣誕老人能夠優(yōu)化其送貨路線,該列表按居住國(guó)家/地區(qū)排序。
參加兒童和假期禮物
該列表似乎不完整。 圣誕老人如何跟蹤向誰(shuí)送的禮物? 現(xiàn)在
HolidayGift表HolidayGift上用場(chǎng)。 由于有些孩子向圣誕老人提供了他們的愿望清單,因此我們現(xiàn)在可以將兩個(gè)表合并在一起,以構(gòu)成一個(gè)包含所有好孩子及其禮物的完整列表。 包括沒(méi)有任何希望的孩子是很重要的(他們會(huì)得到隨機(jī)的禮物),因此我們加入了左聯(lián)盟。
Speedment正在使用構(gòu)建器模式創(chuàng)建Join<T>對(duì)象,然后可以反復(fù)使用該對(duì)象以創(chuàng)建具有類型元素的流
T 。 在這種情況下,它用于HolidayGift Child和HolidayGift 。 該gift_id僅包括gift_id并且匹配在gift_id字段中包含相同值的gift_id 。
這是圣誕老人交付所有包裹的方式:
join.stream().parallel() .forEach(SleighUtil::deliver);可以看出,圣誕老人可以輕松運(yùn)送所有由馴鹿攜帶的帶有平行雪橇的包裹。
這將使流呈現(xiàn)為有效的SQL查詢,但不幸的是,它還不足以及時(shí)完成。
使用JVM中的內(nèi)存加速
現(xiàn)在到有趣的部分。 Santa正在激活Speedment中的JVM內(nèi)存中加速組件,稱為DataStore。 這可以通過(guò)以下方式完成:
var santasWorkshop = new ApplicationBuilder().withPassword("north-pole")// Activate DataStore.withBundle(DataStoreBundle.class).build();// Load a snapshot of the database into off-heap memorysantasWorkshop.get(DataStoreComponent.class).ifPresent(DataStoreComponent::load);此啟動(dòng)配置是對(duì)應(yīng)用程序唯一需要的調(diào)整。 以上所有流構(gòu)造均保持不變。 啟動(dòng)應(yīng)用程序時(shí),數(shù)據(jù)庫(kù)的快照被拉入JVM,并以堆外方式存儲(chǔ)。 由于數(shù)據(jù)是堆外存儲(chǔ)的,因此不會(huì)影響垃圾回收,并且數(shù)據(jù)量?jī)H受可用RAM的限制。 由于圣誕老人正在使用云服務(wù),因此無(wú)法阻止它加載TB的數(shù)據(jù),并且可以輕松擴(kuò)展其RAM。 現(xiàn)在,該應(yīng)用程序?qū)⒏斓剡\(yùn)行一個(gè)數(shù)量級(jí),Santa能夠及時(shí)交付所有軟件包。
使用In-JVM-Memory加速運(yùn)行您自己的項(xiàng)目
如果您想親自嘗試數(shù)據(jù)庫(kù)應(yīng)用程序的速度,可以在此處找到一個(gè)Initializer。 只需輸入所需的數(shù)據(jù)庫(kù)類型(Oracle,MySQL,MariaDB,PostgreSQL,Microsoft SQL Server,DB2或AS400),您就會(huì)得到一個(gè)POM和一個(gè)為您自動(dòng)生成的應(yīng)用程序模板。
如果您需要更多幫助來(lái)設(shè)置項(xiàng)目,請(qǐng)查看Speedment
GitHub頁(yè)面或?yàn)g覽用戶指南 。
s
感謝Julia Gustafsson和Carina Dreifeldt共同撰寫(xiě)本文。
翻譯自: https://www.javacodegeeks.com/2018/12/naughty-nice-santa-gives-java-11-advice.html
總結(jié)
以上是生活随笔為你收集整理的谁去过顽皮,谁去过尼斯? 圣诞老人为您提供Java 11建议!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: jvm 内存镜像_镜像镜像–使用反射在运
- 下一篇: 查询版本号(查询版本 linux)