רנדומיזציה משולשת

boaZone

New member
רנדומיזציה משולשת

כותרת דרמטית, לא?

בעמוד מוצר, יש לי מוצר נוסף. ישנה רשימה של מוצרים נוספים מוכנה מראש, ולכל מוצר יש משקל (מבחינת חשיבות, לא ממש המשקל של המוצר).
מהרשימה אני הכנתי מערך (גם, מראש), שבו המפתח הוא המשקל באופן מצטבר (כלומר, מוצר ראשון המפתח שלו הוא 145, וזה המשקל שלו, המוצר השני הוא 255, והמשקל שלו 110 וככה מצטבר על המוצר האחרון שתמיד נגמר ב- 1000, 100 היה רגיש מדי לעיגול המספר), והערך של המערך הוא פרטי המוצר.
אני מגריל מספר בין 1 ל-1000, מחפש את המפתח שמעל המספר שהוגרל, ומביא את פרטי המוצר.
עובד סופר מהר ונוח (אם יש רעיונות אחרים - אשמח לשמוע, חייב להיות סופר מהיר ויעיל).

עכשיו אומרים לי שאני צריך להביא שלושה מוצרים שונים מהרשימה. איך הייתם ניגשים לנושא? מוציאים את התאים שנבחרו מהמערך ומחשבים יחסיות מחדש או ממשיכים לבחור ערך רדומלי בלופ עד שיש שלושה יחודיים או בכלל משהו אחר? נושא המהירות הוא הכי חשוב, יש עשרות ולפעמים מאות פניות לעמוד הזה בשניה!

תודה,
בועז

(אגב, מחפש מתכנת PHP, רצוי עם הכרות עם YII, יכול להתאים לסטודנטים או מתכנתים מתחילים, למשרה או אפילו חצי משרה - שלחו מסר)
 

bnayal

New member
אז כנראה לא הבנתי.

יש לך מערך, אתה רוצה לקחת 3 איברים שלו בסדר אקראי ואתה לא יודע את המפתחות, נכון?
תעשה shuffle למערך ותקח את ה3 הראשונים.
 

boaZone

New member
זה רעיון, צריך לבדוק את המשמעות מבחינת

ביצועים, והאם זה יכול לעוות לי את היחסיות.
תודה.
 

gilmad

New member
יש לך רשימה מוגדרת

לבחור מוצר אחד אין לך בעיה...
אז ברגע שהוא נבחר פשוט תוציא אותו מהרשימה ותבחר מתוך הרשימה מינוס אחד שיש לך.
רוצה עוד מוצר? אותו דבר - תוציא ותבחר ממה שנשאר..

לדעתי קאשינג יפתור לך את הבעיה של המאות פניות בשניה - תעשה קאש של אפילו דקה.
 

boaZone

New member
הכל נמצא שם ב REDIS

הגישה היא לא הבעיה.
אחרי שהוצאתי אחד, הוא השאיר לי חור במפתחות, כלומר, המפתח של המוצר שנבחר 344 והמשקל שלו 122, ועכשיו הסרתי אותו, הגדלתי את היחסיות של המוצר מעליו, הגדלתי את המוצר שמעליו ב- 122 והרסתי את היחסיות.
בשביל שהרעיון הזה יעבוד, אני צריך לחשב את לכולם את היחסיות מחדש, וזה הרבה עבודה.
מה שאני יכול לעשות הוא למלא את המערך במלא IDים, כלומר, 122 ID של מוצר 12, ו317 ID של מוצר 23, רק תוכן, בלי מפתחות. אבל אני סתם מחזיק מערכי ענק...

יש אולי עוד רעיונות?
 

gilmad

New member
קאשינג זה לא רק לגישה...

זה גם לחישוב. אם לא איכפת לך שהתוצאות שיחזרו במשך דקה יהיו זהות - תעשה קאשינג של דקה על החישוב ואז גם אם יהיו לך 100 כניסות בשניה במקום לבצע את החישוב הזה 6000 פעם תבצע אותו רק פעם אחת בכל דקה.

ואגב - למה אתה מעלה את היחסיות? אם הורדת מוצר עם משקל 122 - במקום שזה יהיה בין 1 ל1000 זה יהיה בין 1 ל878
 

boaZone

New member
גם אופציה מעניינת

יש פה מספיק בסיס בשביל לשחק עם הנושא.

תודה לכולם.
 
למעלה