מהירות ביצועים מול מהירות כתיבת קוד - JAVA מול PYTHON

117oz

New member
מהירות ביצועים מול מהירות כתיבת קוד - JAVA מול PYTHON

הי,
תהיה שעלתה אצלנו לאחרונה -
אני עוסק בתחום שמצריך ניתוחים סטטיסטיים על מאגרי מידע די גדולים, עם זמן ריצה שיכול בקלות להגיע לכמה שעות על מחשב סטנדרטי.
לרוב אנחנו עובדים עם PYTHON, בגלל שמשך כתיבת הקוד קצרה באופן דרמטי בשפה הזו, בהשוואה לשפות אחרות, אבל החיסרון הוא כמובן, זמן הריצה.
לאחרונה ניסיתי לתרגם קוד של PYTHON ל-JAVA. הקוד הכפיל את עצמו בערך פי 5 (כנראה גם בגלל שאני לא ממש מנוסה בג'אווה) ומשך הכתיבה היה בהתאם. מצד שני, משך הריצה ירד דרסטית, וזה גרם לי לתהות -
האם לדעתכם יותר נכון להשקיע משאבים בהגדלת הכח החישובי ברמת החומרה, או בכתיבת קוד בשפות יותר "בסיסיות" (כשלעצמו גוזל לא מעט זמן, בטח אם מתישהו בהמשך מישהו יצטרך לקרוא ולהבין את הקוד שכתבתי)? האם לדעתכם יש מגמה מסוימת לכיוון אחד או אחר בתחומי הפיתוח/אנליזה השונים?
 

andthisistheme

New member
המגמה היא לא זה ולא זה. המגמה היא לעבוד עם כלים מתאימים

אם תגיד איזה בעייה אתה מנסה לפתור אולי מישהו יוכל לייעץ בזה.
 

choo

Active member
המטרה לקצר את משך הזמן הכלליף ולכן זה תלוי:

&nbsp
אם כותבים פעם אחת ומריצים פעם אחת, המשקל של זמן כתיבת הקוד גדול יותר.
אם כותבים פעם אחת ומריצים הרבה פעמים - המשקל של זמן הריצה גדול יותר.
&nbsp
צריך לבצע הערכה של משכי הכתיבה וכמות הריצות הצפויה כדי להחליט באיזו שפה עדיף לכתוב את זה, וכמה כדאי להשקיע בחומרה יקרה יותר (פה נכנס למשחק גם עניין התקציב מול ההכנסות הצפויות מהפעילות)
 

ipv6

Member
ההודעה שלו זועקת "תתייחסו גם לעניין התחזוקה!!"

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

פה יש משמעות לשפה ול"תרבות" במקום. הוא ציין שלקח לו המון זמן לכתוב את גרסת הג'אווה. אם הוא לא מנוסה מספיק בשפה יכול להיות שעם הזמן הוא יאבד את יתרון הביצועים ויספוג את עלות התחזוקה הגבוהה כי זאת לא שפת האם שלו \ לא רגילים כתוב בשפה הנ"ל.
 

bismark1

New member
ככלל אצבע לרוב השקעה בחומרה תהיה זולה יותר

להוציא מקרי קיצון, לעשות אופטימיזציה לקוד זה יקר (זמן פיתוח, אובדן גמישות) וההשקעה בחומרה תחזיר עצמה די מהר. אופטימיזציות בקוד כדאי לעשות במקרה ש - 1. אתה די בטוח שהקוד לא הולך להשתנות 2. אין ברירה: או שאי אפשר לשפר חומרה (תקציב, שיקולים הנדסיים וכו') או שגם ככה שינוי חומרה גורר שינויי קוד (נניח מעבר מ-cpu ל-gpu).
 

ipv6

Member
במערכות ש"מוכרות" ביצועים יהיה לך קשה לעשות את זה

נניח מערכות storage.
אם התוכנה שלך "דפוקה" אז תשיג פחות ביצועים על אותה החומרה ומשהו עם חומרה יותר זולה יצליח לתת אותם ביצועים כמוך במחיר נמוך יותר.

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

כמובן שיש מוצרים שיש מהם דרישות ביצועים אבל השליטה על סוג החומרה שהמוצר רץ עליה, מוגבלת בגלל הלקוח.
 

BlackAdder1

New member
יש גם אלטרנטיבות נוספות

בלי תיאור של הבעייה והנתונים / כמות הנתונים קשה לתת תשובה קונקרטית, אבל כדאי לבדוק אם pyspark \ spark מתאים למה שאתם עושים
 

Guy Yafe

New member
בהתאם למשאבים: גם וגם

אצלנו האלגוריתמאים כתובים את הקוד בפייתון, והמוצר המבצעי הוא מימוש האלגוריתמים בJAVA.
&nbsp
היתרונות:
כל אחד מתעסק במה שהוא מומחה: האלגוריתמאים מומחים במתמטיקה ויודעים לבצע את החישובים בקלות ובמהירות. המפתחים חזקים בJAVA וכותבים בJAVA.
ניתוחים של הבעיה המתמטית בפייתון והצגתם בUI פייתוני פשוטים מאוד.
המחקר מתקדם מאוד מהר כי הפיתוח בפייתון זריז.
הפיתוח בJAVA מביא איתו את כל היתרונות של JAVA על פייתון: ביצועים, מקבול, DevOps פשוט באמצעות גריידל, מעטפת מלאה של המוצר (בסיסי נתונים, רשת וכו') הרבה יותר חזקה, וטסטביליות הרבה יותר טובה.
והכי חשוב: האלגוריתמאים יודעים שהם לא רשאים ולא יכולים לגעת בקוד המבצעי.
&nbsp
חסרונות:
דורש שני צוותים שונים.
דורש מומחיות בשתי שפות התכנות (לא שאני קורא לעצמי מומחה JAVA, אבל בטח יותר מהחוקרים).
דורש הקפדה מאוד חזקה על תאימות בין הJAVA לבין הפייתון (המון regression).
&nbsp
אציין גם שהמערכות שלנו נפרשות על ברזלים של הלקוח שאנחנו לא יכולים לגעת בהם ולקבוע את איכות החומרה.
&nbsp
&nbsp
 

Grosseto

New member
להשאר בפייתון ולתת עדיפות ליעילות של הקוד

לדוגמא, להעתיק נתונים לטבלאות זמניות ולעשות שם מניפולציות SQL יות
 

Grosseto

New member
גם לא הבנתי אם הקוד נמצא בשרת או בקליינט

כמובן שאם אפשר להעביר קוד לשרת עוד יותר טוב
 

user32

Well-known member
מנהל
הפתרון: Jython

נראה לי שזה מתבקש. כתיבה בפיתון, קומפילציה לג'אווה בייט קוד לJVM. המיטב משני העולמות.
 

zaske

New member
ג'ייתון לא מדהימה

היום כתבתי עוד בפיית'ון.
לא "שפת האם" שלי. לא בטוח שיש לי אחת כזו. אולי C?
בסופו של דבר, ככל שתתנסה בשפה תרכוש מיומנויות בה ותשתפר.
עובדה , התגייסתי ב1995 לשרות כמפתח, כן, יש לי 3 שנים שהעדפתי להיות במבוך של פישבך ובניין היפה של טאוב מבלי שעבדתי ועוד שנה שכן עבדתי, אבל תכל'ס - ל
Java הגעתי רק עכשיו.

היום למשל היה לי יום שהוא גם ג'אווה, גם פיית'ון, גם לינוקס, גם ווינדוז (על מכונה וירטואלית), גם batch וגם באש, ככה יצא.

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

user32

Well-known member
מנהל
איבדתי אותך

לא עניין של מדהים או לא מדהים. בפיתון אפשר להשתמש בסינטקס שאי אפשר בג'אווה ולהבנתי זה מה שמקצר את הקוד.
אם בעיית הביצועים נובעת מההרצה של הJVM אל מול ההרצה של סקריפט בפיתון אז ג'ייתון הוא פתרון מתאים לדעתי. אם זו בעיה אחרת כמו כתיבה שפיתון שבאופן שיוצרת בעיית ביצועים בגלל יעילות הקוד (ולא בגלל שזה פיתון) אז אין מנוס מלכתוב אחרת.
 
אני חושב שהפתרון הוא cython

ממה שאני קורא זה נראה לי יותר פופולארי.
זה שילוב של c עם פייתון.
 

Grosseto

New member
אני לא הכרתי האמת את הקומבינות האלה

אבל זה לא משנה בכלל, כל השפות אותו הדבר ,
&nbsp
הביצועים מגיעים מאיך שמתכננים את העבודה, ואיך מבצעים אותה
&nbsp
 

הפרבולה

New member
למה לעבור ל JAVA ? אם כבר תעבר ל C++

זה אמור להאיץ את מהירות הריצה עוד יותר.

לא בטוח ש C++ אמורה להיות יותר קשה לתחזוקה מאשר JAVA, זה יותר תלוי עד כמה "מסודר" כותבים את הקוד.
 
למעלה