PHP חיפוש טקסט בתוך קובץ
-
אני צריך פונקציה לחיפוש טקסט בתוך קובץ, ואני חושב על שני אפשרויות לעשות את זה.
או לטעון את כל תוכן הקובץ בכל קריאה עם file_get_contents, ואז לחפש עם strpos אם מוצא מיקום של הטקסט שלי.
או להשתמש בgrep עם פונקציה של exec.האפשרות הראשונה גרועה כי זה יכול להיות קובץ די גדול, והאפשרות השניה אני לא יודע כמה זה טוב לשלב בין פקודות BASH ללשון של PHP.
לתת קצת רקע, אני עושה קו עם כניסה לפי רשימה לבנה. יש קובץ עם אלפי שורות של מספרים שמאושרים להתקשר, ואני צריך לבדוק כל פעם אם המספר שמתקשר הוא נמצא בתוך הקובץ הזה.
יש אפשרות שלישית, להכניס את כל המספרים לתוך DB, ואז לעשות SELECT כל פעם לבדוק אם המספר נמצא בטבלא.מה האפשרות שאוכלת הכי פחות משאבים לדעתכם? (צריך לקחת בחשבון שיתכן שיתקשרו הרבה מאוד אנשים בו זמנית, וכל פעולה נוספת במהלך השיחה מכבידה עוד קצת על השרתים, לכן לכאורה הDB הוא לא רעיון טוב)
תודה
-
-
@שואף למה לא להחזיק בזיכרון? יש לך איזו מגבלה על הזיכרון?
בכל מקרה נראה לי שהאפשרות של טבלה מאונדקסת היא המהירה ביותר, כי גם ככה אתה רוצה לגשת לדיסק אז במקום שתטען קובץ ותחפש בכולו תן למסד נתונים למטב את זה עם אינדקס -
@dovid אמר בPHP חיפוש טקסט בתוך קובץ:
@nigun לכן הוא כתב API, קרי מערכת קטנה צדדית שלא כתובה בPHP.
זה לדעתי יכול להיות טוב אבל זה בלגן להתבזר על עוד מערכות.מי כתב?
בכל מקרה מעניין אותי באיזה שפות אפשר לשמור את הנתונים בזיכרון ולקבל אותם בAPI
אני משער שאפשר עם C ושאר שפות שהם low-level
אבל מעניין אותי מה שאר השפות שנותנים אופציה כשאת
ולמה כתיבת סקירפט קטן שרץ כל הזמן ברקע אמור ליצור בלגן יותר מאשר קריאה לכל תוכנה אחרת בexec -
@nigun התייחסתי ל@clickone
השאלה שלך לא תלויה בשפות ולא בlow-level אלא בפלטפורמת התכנות, האם היא ברמת השרת או ברמת הבקשה. בPHP נקדות ההתחלה שלך היא רמת הבקשה ולכן אין דרך לשתף מידע בין בקשות.
סקריפט קטן שרץ ברקע מוסיף לך דאגה ברקע, זו אפליקציה נוספת לגמרי ואתה צריך לדאוג לריצתו ולתקינותו וכו'. exec שמסתמך על קבצים שנמצאים בכל מערכת לא מוסיף לך דאגה כזו. -
@nigun אמר בPHP חיפוש טקסט בתוך קובץ:
בכל מקרה מעניין אותי באיזה שפות אפשר לשמור את הנתונים בזיכרון ולקבל אותם בAPI
אם הבנתי נכון את השאלה, ב NODEJS בכל פעם אני מפעיל את השרת הוא מוריד את כל טבלת אנשי הקשר מהDB ואז הוא לא צריך לבדוק כל פעם מול הDB.
מה עוד אתה צריך?
מה התכוונת API? -
@dovid
להקים שרת בשביל כל קובץ זה באמת בזבוז
אני חשבתי יותר על כיוון של מסד נתונים שמאוחסן בזיכרון
(נראה לי שredis עושה משהו כזה)
בהתחלה חשבתי שאפשר לעשות מסד נתונים שיקבל את הקריאות דרך CLI
אבל אחר הבנתי שהרבה יותר נוח להקים שרת כמו כל שאר המסדי נתונים
אבל אני לא חושב שזה יצור בלגן יותר משימוש במסד נתונים רגיל
עריכה: זה נראה שיש ספריות מיועדות לכך כבר בPHP ,למשל memcached -
@dovid
פשוט כי במקרה הזה שואף שאל איך הוא יוצר בקשות רבות לכמות קטנה של נתונים?
לכאורה כאן המקום של אחסון בזיכרון ולא במסד נתונים רגיל
כי הוא יתפוס כמות קטנה של זיכרון ,ויחסוך הרבה יותר משאבים בבקשות
אמנם יכול להיות שזה באמת לא בעיה, והוא סתם חשש שיהיה כאן הרבה בקשות
אבל באופן עקרוני במקרה שיש באמת הרבה בקשות, נראה שזה הפתרון הכי טוב.ההבדל בין CLI לשרת זה האם הבקשה עוברת מעל TCP, ואז השרת סך הכל מדפיס את המשתנה שנוצר בהפעלה
או שהבקשה מתקבלת בהרצה חדשה של האפליקציה ואז צריך לחפש את הכתובת של המשתנה המבוקש
(או שיש דרך יותר חכמה לעשות את זה)
אבל בכל מקרה זה כנראה סתם מסובך, ולכן redis וכדו' מקבלים את הבקשות דרך TCP -
@dovid
אגב hugo (פלטפורמה לבניית אתרים) בברירת מחדל שומר את כל התוכן של האתר בזיכרון.
אני משער שהסיבה לכך היא שרוב האתרים לא שוקלים כ"כ הרבה (אתר ריק לוקח 100 מגה, אני לא יודע כמה אתר גדול לוקח)
והם כנראה רוצים שתוכל להקים אתר עם מאות אלפי כניסות ליום, והדבר היחיד שתצטרך לדאוג לו זה רוחב פס.
אמנם הם נותנים גם אפשרות לשמור את זה בדיסק,
אבל מהדיונים בפורום שלהם זה נשמע שזה בשביל אתרים ענקיים עם מאות אלפי עמודים,
ושאתר רגיל ישמור את הקבצים הגדולים (וידיאו,שמע,תמונות) במקום אחר,
(או בשביל מי שרוצה לקבל קבצים סטטיים ולהעלות אותם לS3 וכדו')