מידע על JSON

‫JavaScript Object Notation‏ (JSON) מספק דרך יעילה לאחסון נתונים מובְנים ולביצוע מניפולציות עליהם ב-Memorystore for Valkey. שימוש ב-JSON מספק את היתרונות הבאים:

  • אפשרויות חיפוש וסינון מהירות
  • ביצוע עדכונים במקום לנתוני JSON בלי צורך להחליף מסמכים שלמים
  • ביצוע שאילתות, שינוי וניהול של מבני נתונים מורכבים ביעילות

אם האפליקציות שלכם דורשות אחסון נתונים דינמי וגמיש, JSON הוא הפתרון האידיאלי בשבילכם. בנוסף, באמצעות JSON, אפשר לקודד מערכי נתונים מורכבים בתוך מופעים של Memorystore for Valkey בלי להשתמש בסכימות. אתם יכולים לאחסן נתונים במופעים, לגשת אליהם ולעדכן אותם, ולא צריך לנהל קוד בהתאמה אישית כדי לבצע סריאליזציה ודה-סריאליזציה של הנתונים.

מסמך JSON הוא פורמט טקסט שקריא לאנשים, שמשמש לאחסון ולהעברה של נתונים. הפורמט הזה מורכב מזוגות של מפתח-ערך ומסוגי נתונים מובְנים. פורמט JSON מאפשר לאחזר ולעדכן חלקים ממסמך JSON בלי צורך לשנות את כל האובייקט. כך אפשר לשפר את הביצועים ולהפחית את העלויות. בנוסף, פורמט JSON תואם ל-RFC 7159, לתקן ECMA-404 להחלפת נתונים ב-JSON ול-UTF-8 Unicode בטקסט JSON.

זמינות

אם יוצרים מופע של Memorystore for Valkey, גרסה 8.0 ואילך, אז גרסה 1.0 של סוג הנתונים JSON והפקודות המשויכות זמינה באופן אוטומטי. סוג הנתונים הזה תואם ל-API של מודול JSON בגרסה 2. בנוסף, החל מ-RFC 7159, רכיב הבסיס של מסמך JSON יכול להיות מכל סוג נתונים של JSON.

מאפייני JSON

ל-JSON יש את המאפיינים הבאים:

  • גודל מסמך מקסימלי: כדי למנוע בעיות פוטנציאליות של חוסר זיכרון בגלל הוספות זדוניות או בלתי מוגבלות, אפשר להגדיר מגבלה על הגודל של מפתחות JSON בודדים.

    כברירת מחדל, הערך של המאפיין הזה מוגדר ל-0, כלומר אין הגבלה על גודל מסמך ה-JSON. כדי להגדיר את המגבלה הזו, משתמשים בפקודה CONFIG SET json.max-document-size VALUE, כאשר VALUE הוא הגודל המקסימלי של המסמך. לדוגמה, אם מציינים 4123456, גודל המסמך המקסימלי הוא 4,123,456 בייטים (4MB).

    כדי לראות כמה זיכרון תופס ערך JSON שמאוחסן במפתח שצוין, אפשר להשתמש בפקודות JSON.DEBUG MEMORY KEY או MEMORY USAGE KEY. בפקודות האלה, KEY הוא שם המפתח שבו מאוחסן ערך ה-JSON.

  • עומק מקסימלי: רמת הקינון המקסימלית לאובייקטים ולמערכים של JSON. מידע נוסף זמין במאמר בנושא מגבלת עומק הקינון המקסימלית.

גודל מסמך JSON

מסמך JSON נשמר באופן פנימי בפורמט שמיועד לגישה מהירה ולשינוי, ולכן סוג המסמך הזה יכול לצרוך הרבה זיכרון. כדי לבדוק כמה זיכרון תופס מסמך JSON, משתמשים בפקודה JSON.DEBUG MEMORY KEY, כאשר KEY הוא שם המפתח שמכיל את המסמך.

קטגוריות JSON

כדי לנהל את הגישה לפקודות JSON ולנתונים, משתמשים בקטגוריה @json. בנוסף לקטגוריה הזו, הקטגוריות הבאות משתמשות בפקודות JSON: ‏ @read,‏ @write,‏ @fast,‏ @slow ו-@admin.

בטבלה הבאה מצוין אם אפשר למפות פקודות JSON לקטגוריות @read, @write, @fast, @slow, @admin ו-@json.

פקודת JSON @json @read @write @fast @slow @admin
JSON.ARRAPPEND Y N Y Y N N
JSON.ARRINDEX Y Y N Y N N
JSON.ARRINSERT Y N Y Y N N
JSON.ARRLEN Y Y N Y N N
JSON.ARRPOP Y N Y Y N N
JSON.ARRTRIM Y N Y Y N N
JSON.CLEAR Y N Y Y N N
JSON.DEBUG Y Y N N Y Y
JSON.DEL Y N Y Y N N
JSON.FORGET Y N Y Y N N
JSON.GET Y Y N Y N N
JSON.MGET Y Y N Y N N
JSON.MSET Y N Y N Y N
JSON.NUMINCRBY Y N Y Y N N
JSON.NUMMULTBY Y N Y Y N N
JSON.OBJKEYS Y Y N Y N N
JSON.OBJLEN Y Y N Y N N
JSON.RESP Y Y N Y N N
JSON.SET Y N Y N Y N
JSON.STRAPPEND Y N Y Y N N
JSON.STRLEN Y Y N Y N N
JSON.TOGGLE Y N Y Y N N
JSON.TYPE Y Y N Y N N

מדדים בפורמט JSON

כדי לעקוב אחרי השימוש במסמכי JSON, המדדים הבאים של Cloud Monitoring זמינים ב-Memorystore for Valkey:

  • documents_count
  • used_memory

מידע נוסף על המדדים האלה זמין במאמר מדדים של מסנן בלום ו-JSON.

פקודות JSON

בקטע הזה מפורטות פקודות JSON שאפשר להשתמש בהן כדי לבצע פעולות במסמכי JSON, ומוסבר מה כל אחת מהן עושה.

פקודה תיאור
JSON.ARRAPPEND הוספה של ערך JSON אחד או יותר למערך בנתיב.
JSON.ARRINDEX חיפוש המופע הראשון של ערך JSON סקלרי במערך.
JSON.ARRINSERT הוספה של ערך JSON אחד או יותר למערך בנתיב לפני האינדקס שצוין.
JSON.ARRLEN שליפת האורך של מערך ה-JSON בנתיב.
JSON.ARRPOP הסרה והחזרה של רכיב מאינדקס במערך.
JSON.ARRTRIM חיתוך של מערך בנתיב כך שיכיל רק את טווח האלמנטים המצומצם שציינתם.
JSON.CLEAR מחיקת המערכים או אובייקט JSON בנתיב שצוין.
JSON.DEBUG אחזור מידע על מסמך JSON. ‫Memorystore for Valkey תומך בפקודות המשנה הבאות:
  • MEMORY: דיווח על השימוש בזיכרון של ערך מסוים בבייטים.
  • DEPTH: דיווח על עומק הנתיב המקסימלי של מסמך JSON.
  • FIELDS: מדווח על מספר השדות ברכיב JSON. האלמנט הזה מאוחסן במפתח שאתם מציינים.
  • HELP: מחזירה מידע מועיל על הפקודה JSON.DEBUG.
JSON.DEL
JSON.FORGET
מחיקת ערכי JSON בנתיב שאתם מציינים.
JSON.GET הפונקציה מחזירה ערך בנתיב שאתם מציינים בפורמט JSON מסודר.
JSON.MGET החזרת ערכים בנתיב שצוין מכמה מפתחות של מסמכים.
JSON.MSET הגדרת כמה ערכי JSON בנתיב לכמה מפתחות.
JSON.NUMINCRBY הגדלת ערכים מספריים שמאוחסנים בנתיב במספר שאתם מציינים.
JSON.NUMMULTBY הכפלת ערכים מספריים שמאוחסנים בנתיב במספר שאתם מציינים.
JSON.OBJKEYS אחזור שמות של מפתחות מאובייקטים מסוג JSON בנתיב שאתם מציינים.
JSON.OBJLEN הפונקציה מאחזרת את מספר המפתחות באובייקט JSON בנתיב שאתם מציינים.
JSON.RESP הפונקציה מחזירה את ערך ה-JSON של מפתח בפורמט Redis serialization protocol (RESP).
JSON.SET הגדרת ערכי JSON בנתיב שאתם מציינים.
JSON.STRAPPEND הוספת מחרוזת למחרוזות JSON בנתיב שאתם מציינים.
JSON.STRLEN אחזור האורך של ערכי מחרוזת JSON בנתיב שאתם מציינים.
JSON.TOGGLE החלפת ערך בוליאני בין true ל-false. הערך הזה מאוחסן בנתיב שאתם מציינים.
JSON.TYPE אחזור הסוג של ערך JSON בנתיב שאתם מציינים.

איך Memorystore for Valkey פועל עם JSON

בקטע הזה מוסבר איך Memorystore for Valkey יוצר אינטראקציה עם סוג הנתונים JSON.

כמה ביטויי תנאי

אם יש כמה ביטויי סינון מותנים, Memorystore for Valkey מעריך אותם בסדר הבא:

  1. פעולות בתוך סוגריים
  2. הביטוי הלוגי AND (&&)
  3. הביטוי הלוגי OR (||)

המגבלה המקסימלית של עומק הקינון

כשבאובייקט או במערך JSON יש רכיב שהוא אובייקט או מערך JSON אחר, האובייקט או המערך הפנימיים מוטמעים באובייקט או במערך החיצוניים. המגבלה המקסימלית של עומק הקינון היא 128. לכן, ערך כמו $.a.b.c.d... יכול להגיע רק ל-128 רמות.

אם תנסו ליצור מסמך JSON עם עומק קינון גדול מ-128, המערכת של Memorystore for Valkey תדחה את המסמך ותקבלו שגיאה. עם זאת, אפשר לשנות את ההגבלה הזו באמצעות הפקודה CONFIG SET json.max-path-limit VALUE, כאשר VALUE הוא מגבלת העומק הרצויה.

מספרי JSON

ב-JSON, גם מספרים עם נקודה עשרונית וגם מספרים שלמים נקראים מספרים כי יש להם את אותו סוג נתונים. כש-Memorystore for Valkey מקבל מספר JSON, הוא ממיר את המספר לאחד מהייצוגים הבינאריים הפנימיים הבאים:

  • מספר בשיטת נקודה צפה (floating-point) עם דיוק כפול של IEEE‏ 64 ביט
  • מספר שלם ב-64 סיביות עם סימן

פורמט JSON לא שומר את המחרוזת המקורית ואת כל העיצוב שלה. כש-Memorystore for Valkey מוציא מספר כחלק מתגובת JSON, הוא ממיר את המספר מהייצוג הבינארי הפנימי למחרוזת שניתנת להדפסה, באמצעות כללי עיצוב גנריים.

כשמשתמשים בפקודות JSON.NUMINCRBY ו-JSON.NUMMULTBY עם מספרים בפורמט JSON, התנאים הבאים חלים:

  • אם שני המספרים הם מספרים שלמים והתוצאה היא מחוץ לטווח של int64, התוצאה הופכת אוטומטית למספר נקודה צפה של 64 ביט IEEE בדיוק כפול.
  • אם לפחות אחד מהמספרים הוא מספר נקודה צפה, התוצאה היא מספר נקודה צפה של 64 ביט עם דיוק כפול לפי IEEE.
  • אם התוצאה חורגת מהטווח של מספר נקודה צפה עם דיוק כפול של 64 ביט לפי IEEE, תוצג הודעת השגיאה OVERFLOW.

מערכים ישירים

‫Memorystore for Valkey מסנן ישירות אובייקטים של מערכים. לדוגמה, אם יש לכם נתונים כמו
&lbrack;0,1,2,3&rbrack; ושאילתת נתיב כמו $[?(@<3)], אז Memorystore for Valkey מחזיר 0,1,2&rbrack;
&lbrack;. אם יש לכם נתונים כמו {"my_valkey_key":[0,1,2,3]} ושאילתת נתיב כמו
$.my_valkey_key[?(@<3)], אז Memorystore for Valkey מחזיר גם 0,1,2 &rbrack;
&lbrack;.

אינדקסים של מערכים

ב-Memorystore for Valkey אפשר להשתמש באינדקסים חיוביים ושליליים למערכים. התנאים הבאים חלים על סוגי האינדקסים האלה:

  • אינדקס חיובי: המספרים מתחילים בתחילת המערך. לדוגמה, אם למערך יש אינדקס חיובי של שלוש, אז 0 שולף את הרכיב הראשון, 1 שולף את הרכיב השני ו-2 שולף את הרכיב השלישי.
  • אינדקס שלילי: המספרים מתחילים בסוף המערך. אם למערך יש אינדקס שלילי של שלוש, אז -1 מחזיר את הרכיב השלישי, -2 מחזיר את הרכיב השני ו-3 מחזיר את הרכיב הראשון.

ב-Memorystore for Valkey, המערכת לא מעגלת את האינדקסים כלפי מעלה או כלפי מטה. אם יש לכם מערך באורך 3, ואתם קוראים לאינדקס חיובי שגדול מ-3 או לאינדקס שלילי שקטן מ-3-,‏ Memorystore for Valkey לא מחזיר תוצאה.

תחביר של נתיבי JSON

אי אפשר להשתמש בתחביר לא תקין בנתיבי ה-JSON. התנאי הזה חל גם אם קבוצת משנה של נתיב JSON עם תחביר לא תקין מכילה נתיב תקין.