2023-18: 将 OpenDAL KV 性能提升 1000%

来源: 第一财经
2023-08-14 20:36:41

第一财经08月14日:[免费观看]原神r18同人本子H无修正(免费无遮挡韩漫网站大..._videos胖☿7、最新机构关注个股bDqXrkVoz-VSHDYS7123FID-BPfeYUqP

 

这期周报分享一个 OpenDAL 的低垂果实:通过去除额外的复制开销将 OpenDAL KV 性能提升 1000%!

背景

OpenDAL 在很久之前增加了 Kv Adapter:通过将 Key-Value 存储后端的常用 GET/SET 操作抽象出来以大幅度简化对接一个 kv service 的成本。维护者需要简单的实现 GET/SET/DELETE 等函数就能够对接形如 Redis/HashMap 这样的存储后端:

#[async_trait]
pub trait Adapter: Send + Sync + Debug + Unpin + 'static {
 async fn get(&self, path: &str) -> Result<Option<Vec<u8>>>;

 async fn set(&self, path: &str, value: &[u8]) -> Result<()>;

 async fn delete(&self, path: &str) -> Result<()>;
}

但是对于纯内存的数据结构来说,Kv Adapter 并不是零开销的:

  • 写入的时候需要对数据进行额外的多次复制
  • 读取时需要将所有的数据都复制出来

不仅如此,现在的 Kv Adapter 只能存储字节流,无法存储额外的 metadata,使得其使用场景受到了不应该的限制。

改进

Issue kv: Use Bytes as value to avoid copy between read/write 提出可以在 map 中存储 Bytes 而不是 Vec<u8> 来避免额外的复制,而 Alternative implementation for memory backend 则更进一步的指出我们可以在 map 中存储一个自定义的数据结构,里面可以附加上的 metadata。

结合以上两个思路,我提出了新的 Typed Kv Adapter

#[derive(Debug, Clone)]
pub struct Value {
 pub metadata: Metadata,
 pub value: Bytes,
}

#[async_trait]
pub trait Adapter: Send + Sync + Debug + Unpin + 'static {
 async fn get(&self, path: &str) -> Result<Option<Value>>;

 async fn set(&self, path: &str, value: Value) -> Result<()>;

 async fn delete(&self, path: &str) -> Result<()>;
}

在数据结构中引入自行设计的 Value 结构体,存储支持零开销复制的 Bytes 而不是 Vec<u8>,使得我们的 Adapter 不需要额外的复制就能够读写数据。

迁移 moka

将一个 service 从 kv::Adapter 迁移至 typed_kv::Adapter 非常简单,我们只需要将其定义声明修改即可:

- inner: SegmentedCache<String, Vec<u8>>,
+ inner: SegmentedCache<String, typed_kv::Value>,

然后修改对应 Adapter 的接口,比如:

- async fn get(&self, path: &str) -> Result<Option<Vec<u8>>>
+ async fn get(&self, path: &str) -> Result<Option<typed_kv::Value>>

效果

在演示 PR 中,我将 moka 从 kv::Adapter 迁移到了 typed_kv::Adapter。在所有的基准测试中,读写性能都有了显著提高。其中,最低的 read 提升了 10%,最高的提升达到了 1519.8%;write 部分受益于零开销实现的 Bytes 类型,在 service_moka_write_once/16.0 MiB 上取得了 166323% 的性能提升。

下一步计划

接下来,OpenDAL 将把所有的内存后端迁移到 typed_kv::Adapter,并增加更多的 kv 后端支持。然后可以进行一次横向的 bytes 读写性能比较,看看在 OpenDAL 的标准使用场景下,看看哪个内存后端性能更强~

(说)【shuo】(白)【bai】(了)【le】(,)【,】(老)【lao】(郭)【guo】(就)【jiu】(是)【shi】(她)【ta】(的)【de】(全)【quan】(部)【bu】(。)【。】

 【截】そんな突撃隊の話をすると直子はいつも笑った。彼女が笑うことは少なかったのでc僕もよく彼の話をしたがc正直言って彼を笑い話のたねにするのはあまり気持の良いものではなかった。彼はただあまり裕福とはいえない家庭のいささか真面目すぎる三男坊にすぎなかったのだ。そして地図を作ることだけが彼のささやかな人生のささやかな夢なのだ。誰がそれを笑いものにできるだろう【至】✌【2】【0】【2】「こういうときにも冗談しか言えないんですか」と僕はあきれて言った。【2】日曜日の朝c僕はいつものように机に向って直子への手紙を書いた。大きなカップでコーヒーを飲みcマイルスディヴィスの古いレコードを聴きながらc長い手紙を書いた。窓の外には細い雨が降っていてc部屋の中は水族館みたいにひやりとしていた。衣裳箱から出してきたばかりの厚手のセーターには防虫剤の匂いが残っていた。窓ガラスの上の方にはむくむくと太った蠅が一匹とまったまま身動きひとつしなかった。日の丸の旗は風がないせいで元老院議員のトーガの裾みたいにくしゃっとボールに絡みついたままびくりとも動かなかった。どこかから中庭に入りこんできた気弱そうな顔つきのやせた茶色い犬がc花壇の花を片端からくんくんと嗅ぎまわっていた。いったい何の目的で雨の日に犬が花の匂いを嗅いでまわらねばならないのかc僕にはさっぱりわからなかった。【年】卐【底】【,】【明】私の忠告はとても簡単です。まず第一に緑さんという人にあなたが強く魅かれるのならcあなたが彼女と恋に落ちるのは当然のことです。それはうまくいくかもしれないしcあまりうまくいかないかもしれない。しかし恋というのはもともとそういうものです。恋に落ちたらそれに身をまかせるのが自然というものでしょう。私はそう思います。それも誠実さのひとつのかたちです。【阳】【智】♥【能】【累】✌【计】【开】◆【展】しかし彼は死にかけてはいなかった。ただぐっすりと眠っているだけだった。耳を顔に近づけると微かな寝息が聞こえた。それで僕は安心して隣りの奥さんと話をした。彼女は僕のことを緑の恋人だと思っているらしくc僕にずっと緑の話をしてくれた。【研】「わからない」と僕は言った。【发】℉【项】「少しね」と彼女は言ってcまた髪留めに手をやった。「でももう時間がないの。私cいかなくちゃ」【目】☒【9】そのうちにごはんが炊きあがったのでc僕は鍋に油をしいてすき焼の用意を始めた。【6】®【个】【,】  “没那个必要。”吕布靠在将军椅上面,微微眯起眼睛道:“一个周瑜的影响力,可比此二人厉害多了,说到底,江东的军权如今掌握在周瑜手中,是战是和,全由周瑜做主,此二人回去,倒可以将我长安之繁华景象带回江东,不怕没人与我们合作,江东,不缺的就是软骨头,公台准备拨钱拨粮吧,一场大仗在所难免了。”【其】☆【中】  “属下无能,对方并无接应,向主人刺杀之人,属下不敢留手,不过其中有一人的身份已经确定。”夜鹰躬身道。【整】←【机】  毕竟这是彰显国威的时候,同样也是表示对这两方使者的一种重视。【研】〖【发】☒【项】◐【目】©【2】【7】cそうcと父親が言った。四音節以上の言葉はうまくしゃべれないらしかった。【个】√【,】僕は新宿駅の有料トイレまで緑をつれていって小銭を払って中に入れc売店で夕刊を買ってそれを読みながら彼女が出てくるのを待った。でも緑はなかなか出てこなかった。十五分たってc僕が心配になってちょっと様子を見に行ってみようかと思う頃にやっと彼女が外に出てきた。顔色はいくぶん白っぽくなっていた。【重】第19节【点】♡【关】☿【键】ァ【零】「一度だけ絵ハガキが来たわ。去年の三月に。でもくわしいことは何も書いてないの。こっちは暑いだとかc思ったほど果物がうまくないだとかcそんなことだけ。まったく冗談じゃないわよねえ。下らないロバの写真の絵ハガキで。頭がおかしいのよcあの人。その友だちだか知り【部】☮【件】━【研】【发】【项】  吕布回头看去,看着眼前这名有着阴鸷面孔的老者,没有回答。【目】↑【2】☑【8】♫【个】【,】⊿【技】卐【术】  荆州定要拿到,周瑜同样有自己对天下的策略,徐州已归曹操,这些年来,在陈家的经营下,已经成为曹操的一处粮仓,曹操不可能容许江东染指,而以江东如今的实力,也不好跟曹操正面硬撼,在曹操的压迫下,江东想要有所发展,荆州就是一处重要的用武之地,只要江东能够将荆州拿下来,而后以江东为跳板,西征巴蜀,便可以与吕布、曹操三分天下,若周瑜的计划能够实现的话,江东将会一跃成为足以与吕布、曹操比肩的诸侯。【类】√【创】【新】♥【项】「これが一生つづくわけじゃないんだ」と僕は彼女の背中に手をあててc言った。「いつか終る。終ったところで僕らはもう一度考えなおせばいい。これからどうしようかってね。そのときはあるいは君の方が僕を助けてくれるかもしれない。僕らは収支決算表を睨んで生きているわけじゃない。もし君が僕を今必要としているなら僕を使えばいいんだ。そうだろどうしてそんなに固く物事を考えるんだよねえcもっと肩のカを抜きなよ。肩にカが入ってるからcそんな風に構えて物事を見ちゃうんだ。肩のカを抜けばもっと体が軽くなるよ」【目】【4】☤【0】©【个】☑【,】【海】♚【陆】「説明するから出してもらえませんか」【全】【品】【类】♥【产】☏【品】【研】✈【发】「もちろんしませんよcそんなこと」【涵】↓【盖】彼女の話によるとあの日――つまりあの事件の日よね――その子が泣きはらした顔でピアノのレッスンから帰ってきたんでcいったいどうしたのかって母親が問いただしたらしいのよ。顔が腫れて唇が切れて血が出ていてcブラウスのボタンがとれてc下着も少し破れていたんですって。ねえc信じられるもちろん話をでっちあげるためにあの子自分で全部それやったのよ。ブラウスにわざと血をつけてcボタンちぎってcブラジャーのレースを破いて人でおいおい泣いて目を真っ赤にしてc髪をくしゃくしゃにしてcそれで家に帰ってバケツ三杯ぶんくらいの嘘をついたのよ。そういうのありありと目に浮かぶわよ。【1】☪【.】「涙が出るからつまんないこと言わないでよ」と緑は泣きそうな声で言った。「そんなの洗えばすむことでしょう。遠慮しないで好きなだけ出しなさいよ。気になるんなら新しいの買ってプレゼントしてよ。それとも私のじゃ気に入らなくて出せないの」【X】「どう変えればいいのがかわからないからcそのままでいいよ」【M】☼【W】©【至】【1】√【6】☿【M】☁【W】「そう」【的】「大学に行かれたんでしょうか」【2】♂灵儿oо㊣〖热血同盟【0】【余】  “竖子匹夫!你早晚不得好死!天下英雄,恨不能生啖汝肉!终有一天,将祸及九族!”陈珪挣扎着想要站起来,但吕布一只大手按在他头上,怎能让他站起来。【款】┆【研】☮【发】▽【机】  “叮~咚~”【型】➳【。】➳【仅】☤【2】◈【0】△【2】☤【2】------------【年】☮【研】✔【发】웃【投】◥【入】↑【1】【0】√【.】  对于这个历史上可说是将自己前任逼死的罪魁祸首,吕布初来之时最大的压力源头,其实吕布本身并没有太多的仇恨,但在看到陈珪的那一刻,一股莫名的快感与仇恨纠缠的情绪就这么莫名的在心底里涌出来,那种情绪,让吕布诧异,却并没有刻意去压制,情绪这种东西,在无关大局的情况下,最好还是不要憋着,那样很容易憋出心理变态,吕布很注意自己情绪的发泄,既然出现了,而且仇人也已经被逮到了自己眼前,既然这股负面情绪出现了,而且双方无论在哪个方面,都有着不可调和的矛盾,自然得来个了断。【9】「だってcりょc寮の中で酒飲んじゃいけないのってcきcきc規則だろう」と彼は言った。【8】✈【亿】♡【元】【,】☠【占】♒【营】Ⅻ月火水木金土日【业】レイコさんは煙草の煙を深く吸いこんで吐き出した。そして首を何回か曲げた。【收】  “将军,来啦!”一名校尉眼中带着兴奋的神色冲到张辽身边。【入】  “还不快脱!”扭头看向一群汉中将士,魏延虎目一瞪:“扭扭捏捏,尔等是娘们儿不成?”【的】【3】♡【.】【5】彼は私にとても良くしてくれたわよ。彼は信頼できる誠実な人だしc力強いし辛棒強いしc私にとっては理想的な夫だったわ【7】------------【%】【,】僕は頭がはりさけてしまわないように身をかがめて両手で顔を覆いcそのままじっとしていた。やがてドイツ人のスチュワーデスがやってきてc気分がわるいのかと英語で訊いた。大丈夫c少し目まいがしただけだと僕は答えた。【研】「冗談だよ」と永沢さんは言った。「まc幸せになれよ。いろいろとありそうだけれどcお前も【发】♡【投】☭【入】僕と直子は熱いコーヒーを注文した。【水】♡【平】「レイコさんは御主人や娘さんに会いに行かないんですか東京にいるでしょう」【超】*【行】  不过赵云虽然击溃了公孙度主力,班师回朝,但辽东并未彻底平定,张辽派人开始占领辽东之际,遭到了公孙度之子公孙康连同当地望族的剧烈抵抗,公孙康势穷,抵挡不住吕布这边的猛攻,便向当时的百济国求援。【业】  “喏!”马铁上前一步,躬身道。【平】♀【均】【水】☪【平】↑【。】  “这是个伤心的话题,汉瑜公便不要再提起,你也不容易,来,我们聊聊一些开心的话题。”吕布坐在陈珪身边,摸着那一头白发,感叹道:“这么多年未见,其实对汉瑜公当初的教诲,一直铭记于心,汉瑜公,元龙不错,放眼天下,论谋略强过他者,不出一掌之数,介不介意分享一下白发人送黑发人的感受?元龙被杀之时,您老有何感想?”日韩精品-中文字幕乱码

  (3)TRIXyugujiachanshengbeilishi,yingzhuyisuishihuifanzhuan。✍2021年12月,一审法院裁定崔恩顺伪造证明罪成立,判处她一年监禁。崔恩顺认为量刑不当,提起上诉。京畿道议政府市地方法院在2023年7月21日的二审判决中表示,崔恩顺因犯罪行为攫取巨额利益,犯罪情节严重,遂下令将其当庭逮捕。

  (1)TRIX发生金叉时,市场处于强势或者即将转强,可以考虑适当关注,进行中长线建仓;┃【caozuocelve】

 (福)【fu】(建)【jian】(“)【“】(村)【cun】(B)【B】(A)【A】(”)【”】(玩)【wan】(真)【zhen】(的)【de】  坐在颠簸的马车里,诸葛亮将地图合上,轻叹一口气,看向身边的刘备道:“吕布身边,有能人呐!”  julejie,naojijiekousaidaogongsikeyidazhifenweiqinrushihefeiqinrushiliangzhong。duiEEG(Electroencephalogram,toupinaodian)qudongdefeiqinrushinaojijiekougongsilaishuo,jishunandianzaiyu,ruhecongtoupinaodianxinhaozhongjieduchuxiangyaodexinhao。zhegexinhaotongchanghenruo,bingchanzazhezayindeganrao。

  该高管还表示,对于小型基金公司而言,债券型基金和权益类基金的发展各有难处,前者需要找银行和保险等大资金的机构支持,后者则需要靠零售端的客户为主。但不论是大型基金公司,还是小型基金公司,最终还是需要靠业绩吸引资金。■(剑)【jian】(拔)【ba】(弩)【nu】(张)【zhang】(的)【de】(氛)【fen】(围)【wei】(已)【yi】(经)【jing】(烘)【hong】(托)【tuo】(到)【dao】(位)【wei】(,)【,】(接)【jie】(下)【xia】(来)【lai】(可)【ke】(能)【neng】(是)【shi】(旷)【kuang】(日)【ri】(持)【chi】(久)【jiu】(的)【de】(交)【jiao】(锋)【feng】(。)【。】

  “古尔班通古特沙漠固定、半固定的性质还得益于沙漠中广泛存在悬湿沙层。”宋春武说,古尔班通古特沙漠沙丘湿沙层为植物根系提供了良好的水分条件,让植物可以度过酷热干旱的夏季,“在这里进行人工造林固沙的关键,就在于营造适合植物生长的条件。”Ⓐ2023zhongguancunluntanyi“kaifanghezuo・gongxiangweilai”weizhuti。5yue25ri,xijinpingxiangluntanzhihexinshizhichu,dangqian,xinyilunkejigeminghechanyebiangeshenrufazhan,renleiyaopojiegongtongfazhannanti,biyiwangrenheshihoudougengxuyaoguojihezuohekaifanggongxiang。

  jinnianlai,zhejiangshenghangzhoushiyuhangqujianchifeiyirencaipeiyang,dingqijubanxianchangjiaoxuehuodong,chongfenfahuifeiyichuanchengren“chuanbangdai”zuoyong,buduanpeiyu、zhuangdafeiyichuanchengrencaiduiwu。tuwei8yue3ri,zhejiangshengjifeiyixiangmu“aoyudeng”chuanchengrenzaiyuhangquluniaozhengeidangdiqingnianchuanshou“aoyudeng”zhizuojiyi。⊙  全球文明倡议的四个“共同倡导”,即共同倡导尊重世界文明多样性、共同倡导弘扬全人类共同价值、共同倡导重视文明传承和创新、共同倡导加强国际人文交流合作,深刻揭示人类文明发展规律,体现文明的多样性、共通性、发展性等特征,构成这一倡议的主要内涵。

(来源:刘永)

发布于:鄢陵县
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
用户反馈 合作

Copyright © 2023 Sohu All Rights Reserved

搜狐公司 版权所有