Γεια σας, 1η φορα γραφω σε ελληνικο φορουμ περι python.
Εχω φτιαξει ενα αλγοριθμο (συμπιεσης, συγκεκριμενα σε ανεστραμμενα αρχεια ) στο οποιο προσπαθω να βρω patterns μεσα στο αρχειο.
Ta patterns που βρισκω τα κωδικοποιω και τα αποθηκευω στην μνημη χρησιμοποιωντας dictionary(υποψιν πως ο αλγοριθμος τσεκαρει να δει αν τα patterns υπαρχουν και αν οχι τοτε τα αποθηκευει, seek/append, αλλιως προχωραει στις επομενες λεξεις).
Μετα απο καποιο σημειο η μνημη του υπολογιστη & το swap space γεμιζει με αποτελεσμα να κρασαρει.
Αυτο που εκανα στη συνεχεια ηταν να φτιαξω μια βαση δεδομενων(χρηση sqlite3) ουτως ωστε με το που γεμισει η μνημη να αρχισει το append στην βαση δεδομενων(στο δισκο). Το προβλημα ειναι πως με το που αρχισει το Ι/Ο στο δισκο ο χρονος, οπως ειναι και λογικο, αυξανεται υπερβολικα.
Ειχα χρησιμοποιησει αντι της βασης δεδομενων, το redis, που ειναι μια συμπιεσμενη βαση (η οποια χτιζεται στη RAM) αλλα και παλι ειχα memory problems.
H mysql απο οτι εψαξα και ειδα εχει πιο αργα queries σε σχεση με την sqlite3.
Για μικρα αρχεια δεν υπαρχει κανενα προβλημα εχω γρηγορα αποτελεσματα. Σε μεγαλου μεγεθους αρχεια ο χρονος εκτελεσης ειναι μεγαλο προβλημα (μπορει να τρεχει για βδομαδες).
Το μηχανημα που εχω εχει 16 GB RAM.
Μηπως ξερετε αν υπαρχει αλλη struct καλυτερη απο το sqlite3 για seek/append στο δισκο ?
Ευχαριστω.