קוד: |
{ "id":111, "array_field":["aaa","bbb","ccc","ddd"], "another_field":"string" } |
Anonymous : |
השאלה הנשאלת האם אתה באמת רוצה לשמור json שלא כפוף לסכמה מסויימת (לשמור document) או שאתה יכול לוודא את הסכמה ואז אתה רוצה לשלוף באמצעות שדות ותתי שדות. |
ברנש : | ||
כמובן שאני מעדיף שזה יתבצע באופן תקני (ואם מחר ירצו שאחליף לDB אחר?)
|
קוד: |
REATE TABLE myTable
( id serial NOT NULL, another_field character varying(512), array_field <WTF to put here? ) |
קוד: |
create table lists ( id varchar , index int, value blob) |
Anonymous : | ||
אני לא יודע אם לך זה יתאים אבל אני משתמש במקרים כאלה במטבלה שנייה עם מפתח :
wtftoputhere יהיה מפתח (אני משתמש ב md5sum בגלל שאני צריך לאחזר את המידע) בצורה :
זה שזה מתאים לצורך שלי, לא אומר שזה יתאים לצורך המדוייק שלך. שימוש ב Like במקרה כזה הוא כבד |
קוד: |
select another_field, value from myTable, mt where mt.id = 1000 and mt.id = lists.index |
ברנש : |
ואיך אתה מנסח את שאילתת השליפה? קודם שולף עם in מהטבלא השנייה, ואח"כ join מותנה על הראשונה? זה לא יוצר עומס?
|
קוד: |
'aaa,bbb,ccc,ddd' |
קוד: |
select * from tbl1 where '%aaa%' like array_field or '%bbb%' like array_field or '%ccc%' like array_field |
צפריר : |
אתה מניח שכל הרשומות הן באותו האורך?
מה קורה אם יש פסיק באחד הערכים? מה קורה אם יש שני איברים במערך שתואמים? האם אתה רוצה לדעת רק האם יש התאמה כלשהי? כמוכן עדכון המערך יכול להיות יקר יותר. |
ברנש : | ||||
מה יקרה אם אשמור את המערך לאחר הפיכתו לטקסט יחיד (פסיקים מפרידים) שהוא ייראה כך:
ואנסח את שאילתת השליפה כך:
עד כמה זה יעמיס את השאילתות האלה בהשוואה לאפשרות של left join על שתי טבלאות וקינון של שאילתה שתצמצם כפילויות בתשובה? |
Anonymous : | ||||||
בשביל תבלה מספיק גדולה , אתה יכול להפיל את התהליך עם דבר כזה, אם הטבלאות קטנות ואורך השורה קטן מגודל node (8K ) אין לך סכנה של קריסת התהליך. תיצור טבלה בגודל של 3 ג"ב , תכניס מחרוזות באורך שונה ובעלי סדר שונה (בשביל למנוע השאילתה שלך צריכה לכל הפחות להיות מחולקת לשלושה שלבים מופרדים (בהם אתה משחרר משאבים) עבור כל אחד מהשאלות. במקרה הגנרי הפעולה שלך מקבילה ל union (ויכול להיות שתומר לכזו) ביחד עם כל הבעיות שקיימות עבור union עם מחרוזות. אבל אם מודבר בטבלה קטנה (כמה עשרות אלפי שורות ) בגדלים קטנים פר שורה, אתה לא אמור לראות הבדל משמעותי בביצועים (שנייה מול שניה ומספר מילי שניות לדוגמה בתוצאה). בגלל שרוב הזמן שהמערכת תיקח לא יהיה על ביצוע השליפה עצמה אלא על הקצאת המשאבים (בהנחה שכל המחרוזות באורך זהה). |