Firefox 29 - jak usunąć wpisy historii odwiedzone mniej niż x razy

11

Kontekst:

Korzystam z mojego profilu Firefox od kilku lat. Mój plik historii naturalnie stał się ogromny. Mam Firefox Sync skonfigurowany między moim głównym komputerem stacjonarnym a laptopem.

Konfiguracje sprzętu:

  • PC: i5-3450, 8 GB pamięci DDR3 RAM, Crucial M4 128 GB SSD
  • laptop: Pentium SU4100, 4 GB pamięci DDR3 RAM, dysk twardy WD 5400 rpm

Dostęp do wpisów historii podczas pisania w Awesome Bar na moim komputerze zajmuje dość dużo czasu, pomimo przyzwoitej konfiguracji, laptop jest jeszcze wolniejszy. To doświadczenie nie odpowiada.

Pomyślałem, że jeśli trochę wyczyszczę historię, mogę uniknąć tworzenia nowego profilu, aby przyspieszyć.

Samo pytanie:

Ilustrować:

historia

Czy istnieje sposób na usunięcie wszystkich wpisów historii, które były odwiedzane mniej niż x (powiedzmy 5) razy, a jednocześnie ostatnia wizyta ma mniej niż y (powiedzmy 120) dni?

afaik plik historii jest pewnego rodzaju bazą danych SQL, ale tak naprawdę nie jestem pewien, w jaki sposób dane są zapisywane, czy istnieje „bezpieczny sposób” ich edycji i jak wyglądałoby zapytanie do zrobienia, czego potrzebuję.


Przeglądałem poprzednie pytania SuperUser, aby sprawdzić, czy mogę znaleźć odpowiednie informacje.

W moim katalogu profilu przeglądarki Firefox znajduje się plik o nazwie places.sqlite. Otwarcie go za pomocą sqlite ujawnia (między innymi) stoły moz_placesi moz_historyvisits. Wygląda na to, że moz_historyvisitsużywa pierwotnego z moz_placesdo odwoływania się do adresów URL.

Ponieważ nie jestem zaznajomiony z bazami danych, tak naprawdę nie rozumiem, w jaki sposób powiązane są dwie tabele wymienione w cytacie.

zrzut ekranu części tabel places_sqlite

Zauważyłem, że visit_countjest w standardowym formacie, co ułatwia pracę z nim. Te last_visit_datespojrzenia szyfrowane moim gołym okiem, ale nie widzę, w jaki sposób.

Mam nadzieję, że to pomaga, jestem na granicy rozumu.

lousyuser
źródło
Aby odpowiedzieć na jedno z twoich pytań, zgodnie z tą odpowiedzią Firefox faktycznie używa SQL. Polecam odpalenie SQLLite i stamtąd.
AStopher
Co próbowałeś do tej pory? Zanim przejdziesz dalej, czy możesz potwierdzić, że nowy profil Firefoksa zapewnia szybsze działanie, szczególnie na laptopie?
i31415
1
Właśnie opublikowałem odpowiedź, która zawiera nowe informacje. Jeśli chodzi o snappiness, nie, nie próbowałem, ale wyraźnie pamiętam, że Awesome Bar był znacznie szybszy, gdy profil był całkiem nowy (a historia nie była zaśmiecona przez wiele wpisów), zarówno na laptopie, jak i na komputerze.
lousyuser
Czy po wyczyszczeniu historii zauważyłeś poprawę wydajności? - edit: ups: Widzę, że skomentowałeś wybraną odpowiedź i zauważyłeś wielką poprawę.
ndemou

Odpowiedzi:

9

Po przeprowadzeniu niektórych badań (patrz na końcu „referencje”), wymyśliłem to (swego rodzaju) proste rozwiązanie:


BACKUP FIRST. PIERWSZY ZAMKNIJ FIREFOX


Wymaga to edycji bazy danych SQLite (samodzielnej bazy danych SQL; zob. Artykuł w Wikipedii ) przeglądarki Mozilla Firefox poprzez wykonanie zapytania w celu znalezienia wszystkich rekordów spełniających warunek (w twoim przypadku - wyświetlono mniej niż 5 razy i nie odwiedzono w ostatnie 120 dni).


BACKUP FIRST. PIERWSZY ZAMKNIJ FIREFOX

Instrukcje rozpoczynają się:


To działa (przetestowane i współpracuje z moim Firefoksem wer. 29.0.1). W 12 łatwych (ish) krokach:

  1. Zainstaluj przeglądarkę bazy danych SQLite

  2. Otwórz to

  3. Kliknij Otwórz bazę danych

  4. Przejdź do C:\Users\[USER]\AppData\Roaming\Mozilla\Firefox\Profiles\[PROFILE]edycji zgodnie z wymaganiami

    ZAPASUJ PONIŻSZE PLIKI !!

  5. Otwórz places.sqlitez katalogu otwartego w kroku 4.

    POWAŻNIE, ZAPASY PIERWSZE !!

  6. Kliknij kartę Wykonaj SQL.

  7. Wpisz to:

    SELECT *
    FROM moz_places
    WHERE
        last_visit_date BETWEEN strftime('%s','2014-04-01')*1000000
                        AND strftime('%s','2014-05-30')*1000000
        AND visit_count < x(2)
    
  8. Zamień x(2)na 5 (w twoim przykładzie)

  9. Zamień 2014-04-01i 2014-05-30na żądany zakres dat

  10. Naciśnij niebieski przycisk odtwarzania.

  11. Sprawdź, czy wyświetlane witryny są poprawne (powinny, ale sprawdź dwukrotnie!)

  12. Jeśli tak, zamień pierwsze dwa wiersze powyższego kodu na:

    DELETE
    FROM moz_places
    

    więc twój kod wygląda mniej więcej tak:

    DELETE
    FROM moz_places
    WHERE
        last_visit_date BETWEEN strftime('%s','2014-04-01')*1000000
                        AND strftime('%s','2014-05-30')*1000000
        AND visit_count < x(2)
    

GOTOWY! Zamknij program i kliknij zapisz podczas zamykania.

Instrukcje kończą się


Co o last_visit_date?

Data ostatniej wizyty wygląda na zaszyfrowaną gołym okiem, ale nie widzę, w jaki sposób.

Nie nazwałbym tego „zaszyfrowanym” (chociaż nie zgadzam się, że wygląda na zaszyfrowanego). Jest po prostu w innym „systemie”. Data jest w systemie Unixczasu (lub Epoch/ POSIX). Jest to liczba sekund, które upłynęły od 00:00:00 (UTC) 1 stycznia 1970 r. 1 godzina to 3600 sekund. 1 rok to 31556926 dni.

Po więcej informacji. sprawdź ten artykuł w Wikipedii lub stronę internetową, która konwertuje czas do i z epoki.


Zrzuty ekranu (zignoruj ​​zapytania SQL dotyczące tych obrazów, są one nieprawidłowe. Mają one na celu przede wszystkim wskazanie, gdzie szukać)

Przeglądarka bazy danych SQLite Przeglądarka bazy danych SQLite Przeglądarka bazy danych SQLite

Dzięki ;):

ᔕᖺᘎᕊ
źródło
Aby zwiększyć bezpieczeństwo, przed zrobieniem tego możesz chcieć wykonać kopię (kopię zapasową) bazy danych.
Bob
Ponadto, jeśli chcesz to zrobić poprawnie, powinieneś również usunąć moz_placeswszystkie wpisy, które nie mają już odpowiednich place_id.
Bob
Przepraszam, miałem na myśli usunięcie zmoz_historyvisits
Bob
@ Bob And place_idin moz_historyvisits= idin moz_places?
ᔕᖺᘎᕊ
Powinien być. Są dwa sposoby, aby sobie z tym poradzić: 1. usuń z moz_historyvists pierwszego ( delete from moz_historyvisits as hv left join moz_places as p on hv.place_id = p.id where p.visit_count...) lub 2. po wyczyszczeniu moz_placesmożesz usunąć z moz_historyvisitskażdego wpisu, który nie ma odpowiedniego wpisu . Wolę opcję 1 osobiście. Nie używaj go bez testowania; mój SQL jest raczej zardzewiały i nauczyłem się z pgsql, a nie sqlite. Możesz być w stanie usunąć oba z nich jednocześnie, test lemme.
Bob