ארכיון יומי: 20 מרץ, 2013

ActiveRecord sucks

מתכנתי רובי (בין אם מסילות או לא), מכירים את ה ORM שנקרא ActiveRecord.
הוא כל כך נפוץ, עד שנוצרו לו אפילו חיקויים בשפות אחרות כדוגמת PHP.

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

למשל יש לי מערכת לא מבוססת web בשום צורה, שעובדת עם מליוני רשומות ביום. הבעיה היא שכבר אחרי 200 גישות למסד הנתונים, למרות שה pool מוגדר רק ל120 חיבורים, אני מגלה שנפתחו עוד חיבורים שלא נסגרים. אם אני מוריד את זה ל50, אז הוא מתלונן שזה לא מספיק, אבל גם אחרי שעה של חוסר פעילות, הוא לא מסיים את החיבורים למסד הנתונים, וזה למרות שמוגדר לו להחזיר את החיבור לאחר 30 שניות ללא שימוש.

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

היו דיווחי באגים שונים, ו"תיקונים" והבעיה פשוט ממשיכה, לא משנה שאני תמיד מנסה לשדרג לגרסה הכי אחרונה.

אז התחלתי לבדוק ORM אחרים ברובי (כן יש כמה וכמה), ונראה שזו בעיה ייחודית ל AR בלבד.