ماجراجویی: ساختمان با فروشگاه Nats JetStream KV -قسمت 4

خوش آمدید!
اینجا ما دوباره هستیم! رفتن به سریال Adventure My Adventure در فروشگاه Key/Value Value Nats JetStream!
به قسمت 4 سریال ما در کاوش در فروشگاه Nats JetStream KV خوش آمدید!
از کجا خارج شدیم؟
ما در مورد دستورات مختلف از جمله ایجاد ، دریافت ، به روزرسانی و قرار دادن استفاده کردیم. و همچنین چگونه می توانید یک تاریخچه کلیدها را بررسی کنید و اگر دوست داریم مقدار کلیدها را به تجدید نظر قدیمی برگردانیم!
بیایید دریابیم که چگونه حذف کنیم!
حذف یک کلید
خوب این یکی می تواند کمی گیج کننده باشد زیرا در اینجا چند مورد در جریان است. بیایید فقط آن را امتحان کنیم.
بیایید دوباره از ابتدا شروع کنیم ، بنابراین تمام سطل های خود را حذف کنید.
بیایید یک سطل جدید با آن ایجاد کنیم history=3
و استفاده کنید put
برای افزودن برخی از مقادیر … آن را پر کنید!
$ nats kv add --history=3 Bucket1
Information for Key-Value Store Bucket Bucket1 created 2025-02-07T13:50:55-05:00
Configuration:
Bucket Name: Bucket1
History Kept: 3
Values Stored: 0
Compressed: false
Backing Store Kind: JetStream
Bucket Size: 0 B
Maximum Bucket Size: unlimited
Maximum Value Size: unlimited
Maximum Age: unlimited
JetStream Stream: KV_Bucket1
Storage: File
Cluster Information:
Name:
Leader: NAHBJSFROLS2WSIXPPDBIUZXWJX6XIAKK36PTRF72ONLECU22XPPNV23
$ nats kv put Bucket1 Key1 Value1
Value1
$ nats kv put Bucket1 Key1 Value2
Value2
$ nats kv put Bucket1 Key1 Value3
Value3
حالا بیایید حذف کنیم! ما این کار را با del
فرمان
$ nats kv del Bucket1 Key1
? Delete key Bucket1 > Key1? Yes
خوب حالا چی؟ بیایید سعی کنیم get
کلید
$ nats kv get Bucket1 Key1
nats: error: nats: key not found
خوب باحال بیایید مطمئن شویم که از بین رفته است.
$ nats kv ls Bucket1
No keys found in bucket
خوب به نظر می رسد خوب برای تأیید چه کار دیگری می توانیم انجام دهیم؟ بیایید همه آن را امتحان کنیم.
$ nats kv ls
╭────────────────────────────────────────────────────────────────────────────╮
│ Key-Value Buckets │
├─────────┬─────────────┬─────────────────────┬───────┬────────┬─────────────┤
│ Bucket │ Description │ Created │ Size │ Values │ Last Update │
├─────────┼─────────────┼─────────────────────┼───────┼────────┼─────────────┤
│ Bucket1 │ │ 2025-02-07 13:50:55 │ 185 B │ 3 │ 1m17s │
╰─────────┴─────────────┴─────────────────────┴───────┴────────┴─────────────╯
صبر کن 3 مقادیر ؟؟؟ چه خبر است؟
$ nats kv history Bucket1 Key1
╭──────────────────────────────────────────────────────────────────╮
│ History for Bucket1 > Key1 │
├──────┬──────────┬────────┬─────────────────────┬────────┬────────┤
│ Key │ Revision │ Op │ Created │ Length │ Value │
├──────┼──────────┼────────┼─────────────────────┼────────┼────────┤
│ Key1 │ 2 │ PUT │ 2025-02-07 13:51:09 │ 6 │ Value2 │
│ Key1 │ 3 │ PUT │ 2025-02-07 13:51:10 │ 6 │ Value3 │
│ Key1 │ 4 │ DELETE │ 2025-02-07 13:53:52 │ 0 │ │
╰──────┴──────────┴────────┴─────────────────────┴────────┴────────╯
آه آنجاست! بوها DELETE
op. بنابراین ما در واقع کلید را حذف کردیم.
این منطقی است زیرا ما نمی توانیم get
مقدار کلیدها اگر اینجا را می بینید نیز دارای یک طول از 0 و نه ارزشبشر
خوب ، بنابراین هنوز هم در تاریخ وجود دارد همانطور که در زیر می بینیم تجدید نظر 4بشر
بنابراین ناتس حتی اگر حذف شده باشد ، این مسئله را ردیابی می کند. این نوعی مرتب و بسیار هدفمند است. همه رویدادها ردیابی می شوند. ما 3 مدخل داریم زیرا تاریخ به 3 تنظیم شده است. اگر به طور پیش فرض باشیم ، ما 1 ورودی با یک DELETE
op. شما آن را دریافت می کنید این یک نشانگر حذف است که به کلید ما اضافه شده است.
خوب هنوز تاریخ وجود دارد. چه می شود اگر من نمی خواهم آن را به وجود آورد؟
ما می توانیم استفاده کنیم kv compact
بشر
فشرده
بیایید دوباره ، دستورات ما را بررسی کنیم.
Subcommands:
kv add Adds a new KV Store Bucket
kv put Puts a value into a key
kv get Gets a value for a key
kv create Puts a value into a key only if the key is new or it's last operation was a delete
kv update Updates a key with a new value if the previous value matches the given revision
kv del Deletes a key or the entire bucket
kv purge Deletes a key from the bucket, clearing history before creating a delete marker
kv history Shows the full history for a key
kv revert Reverts a value to a previous revision using put
kv info View the status of a KV store
kv watch Watch the bucket or a specific key for updated
kv ls List available buckets or the keys in a bucket
kv compact Reclaim space used by deleted keys
خوب ، بنابراین compact
فضای استفاده شده توسط کلیدهای حذف شده را بازیابی می کند. این به چه معنی است؟
$ nats kv compact Bucket1
? Purge all historic values and audit trails for deleted keys in bucket Bucket1? Yes
$ nats kv history Bucket1 Key1
╭─────────────────────────────────────────────────────────────────╮
│ History for Bucket1 > Key1 │
├──────┬──────────┬────────┬─────────────────────┬────────┬───────┤
│ Key │ Revision │ Op │ Created │ Length │ Value │
├──────┼──────────┼────────┼─────────────────────┼────────┼───────┤
│ Key1 │ 4 │ DELETE │ 2025-02-07 13:53:52 │ 0 │ │
╰──────┴──────────┴────────┴─────────────────────┴────────┴───────╯
آن را بررسی کنید! تمام تاریخ از بین رفته است اما هنوز می توانیم ببینیم که کلید با یک مشخص شده است DELETE
op. ما همچنین می توانیم ببینیم که این اتفاق افتاده است تجدید نظر 4 در کلید ما
بنابراین اساساً جمع و جور تمام اصلاحات قبلی را که دیگر برای هر کلید مشخص شده با یک مورد نیاز نیست ، حذف می کند DELETE
op.
دستور دیگری وجود دارد که می تواند این کار را بر اساس کلیدی برای ما انجام دهد. بیایید آن را بررسی کنیم ، آن را صدا می کند purge
کلیدهای پاکسازی
Purge می تواند با حذف و حذف تاریخ در یک مرحله برای یک کلید مشخص ، این کار را آسانتر کند. می توانید دستورات بالا را بررسی کنید ، زیرا اکنون آنها را به اندازه کافی چاپ کرده ایم!
بیایید آن را امتحان کنیم ، اما اول ، اگر دوباره Key1 را اصلاح کنیم ، اکنون چه اتفاقی می افتد؟
$ nats kv put Bucket1 Key1 Value1
Value1
$ nats kv history Bucket1 Key1
╭──────────────────────────────────────────────────────────────────╮
│ History for Bucket1 > Key1 │
├──────┬──────────┬────────┬─────────────────────┬────────┬────────┤
│ Key │ Revision │ Op │ Created │ Length │ Value │
├──────┼──────────┼────────┼─────────────────────┼────────┼────────┤
│ Key1 │ 4 │ DELETE │ 2025-02-07 13:53:52 │ 0 │ │
│ Key1 │ 5 │ PUT │ 2025-02-07 14:04:24 │ 6 │ Value1 │
╰──────┴──────────┴────────┴─────────────────────┴────────┴────────╯
اوه قلدر! ما تجدید نظر جدیدی را به تاریخ خود اضافه کردیم که اکنون 2 است! ما پیگیری کردیم که OP اخیر یک بود PUT
و ما دوباره یک ارزش داریم! ما می توانیم get
آن و همه چیز! اگر می خواهید آن را امتحان کنید!
بنابراین همانطور که مشاهده می کنید ، می توانید استفاده کنید del
برای حذف یک کلید ضمن حفظ تاریخ خود.
در صورت نیاز ، می توانید compact
سطل برای حذف دائمی تمام تاریخچه کلیدهای حذف شده.
بیایید امتحان کنیم purge
$ nats kv purge Bucket1 Key1
? Purge key Bucket1 > Key1? Yes
$ nats kv history Bucket1 Key1
╭────────────────────────────────────────────────────────────────╮
│ History for Bucket1 > Key1 │
├──────┬──────────┬───────┬─────────────────────┬────────┬───────┤
│ Key │ Revision │ Op │ Created │ Length │ Value │
├──────┼──────────┼───────┼─────────────────────┼────────┼───────┤
│ Key1 │ 6 │ PURGE │ 2025-02-07 14:07:37 │ 0 │ │
╰──────┴──────────┴───────┴─────────────────────┴────────┴───────╯
قاهنگ آن را اضافه کرد PURGE
op. این فقط برای نشان دادن اینکه به سادگی حذف نشده است ، تاریخ نیز حذف شد ، همه در یک فرمان! چقدر راحت!
بیایید یک چیز دیگر را طی کنیم.
سیاست حفظ سطل
بله ، کمی بیشتر برای یادگیری وجود دارد. سیاست حفظ نیز یک چیز است.
اگر سطل به حد ذخیره سازی پیکربندی شده خود برسد (به عنوان مثال ،-بایت 10 مگابایت) ، بازنگری های قدیمی تر ، از جمله نشانگرهای حذف ، ممکن است برای آزاد کردن فضای حذف شوند.
همچنین وجود دارد TTL
روی سطل ها هنگام ایجاد آنها. بیایید سریع با آن واقعی اشتباه بگیریم.
پیش بروید و دوباره تمام سطل ها را حذف کنید و فقط از ابتدا شروع کنید.
بیایید از TTL
پرچم
$ nats kv add --ttl=30s --history=3 Bucket1
Information for Key-Value Store Bucket Bucket1 created 2025-02-07T14:11:41-05:00
Configuration:
Bucket Name: Bucket1
History Kept: 3
Values Stored: 0
Compressed: false
Backing Store Kind: JetStream
Bucket Size: 0 B
Maximum Bucket Size: unlimited
Maximum Value Size: unlimited
Maximum Age: 30.00s
JetStream Stream: KV_Bucket1
Storage: File
Cluster Information:
Name:
Leader: NAHBJSFROLS2WSIXPPDBIUZXWJX6XIAKK36PTRF72ONLECU22XPPNV23
اکنون برخی از کلیدها را ایجاد کنید.
$ nats kv put Bucket1 Key1 Value1
Value1
$ nats kv put Bucket1 Key1 Value2
Value2
$ nats kv put Bucket1 Key1 Value3
Value3
$ nats kv history Bucket1 Key1
╭───────────────────────────────────────────────────────────────╮
│ History for Bucket1 > Key1 │
├──────┬──────────┬─────┬─────────────────────┬────────┬────────┤
│ Key │ Revision │ Op │ Created │ Length │ Value │
├──────┼──────────┼─────┼─────────────────────┼────────┼────────┤
│ Key1 │ 1 │ PUT │ 2025-02-07 14:12:23 │ 6 │ Value1 │
│ Key1 │ 2 │ PUT │ 2025-02-07 14:12:24 │ 6 │ Value2 │
│ Key1 │ 3 │ PUT │ 2025-02-07 14:12:25 │ 6 │ Value3 │
╰──────┴──────────┴─────┴─────────────────────┴────────┴────────╯
بیایید 30 ثانیه صبر کنیم.
… حالا امتحان کن!
$ nats kv history Bucket1 Key1
nats: error: nats: key not found
خوب وای پس فقط از بین رفته است؟
بله ، ما زمان انقضا را روی کلید قرار می دهیم. ما حتی نمی توانیم تاریخ آن را بررسی کنیم!
خوب وای این یک دلهره بود. چیزهای زیادی در آنجا وجود دارد و چیزهایی که ما آن را پوشش نداده ایم اما به یاد می آوریم. این یک سریال مقدماتی است !! (به من راحت برو!)
من به شدت توصیه می کنم اگر چیزی مشخص به نظر نمی رسید ، خودتان با آن بازی کنید. به اندازه کافی آسان است و تاکنون باید مواد غذایی را برای آن داشته باشید!
خوب ما به دستورات اساسی CLI برای فروشگاه Nats JetStream KV رفتیم. می دانم ، می دانم -شما می خواهید چیزی بسازید.
خوب من آن را دریافت کردم بیایید چیزی را در قسمت 5 بسازیم!