Trzymanie skryptu w pamięci po zakończeniu requestu, czy to możliwe?

Trzymanie skryptu w pamięci po zakończeniu requestu, czy to możliwe?
misio_
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 61
0

Dzień dobry!

Czy jest możliwe, by wymusić trzymanie skryptu w pamięci RAM przez cały czas, i uruchamianie działania w oparciu o ten skrypt w RAM?

Mam dużą tablicę (>3M elementów) i z pewnych względów nie mogę używać DB. Tablica importuje się do PHP przez ok 5 sek. Chciałbym ten czas skrócić. Czy da się, tak jak w Django, załadować całą aplikację do RAMu?

PS. Istnieje jeszcze możliwość, że podzielę tą tablicę na segmenty, bo nie wykorzystuję całej tylko max. 1000 jej elementów, jednak nie wiem na etapie projektu, które to będą.

obscurity
  • Rejestracja: dni
  • Ostatnio: dni
2

A z jakich względów nie możesz używać DB?
Normalnie nie ma takiej opcji, możesz użyć plików, lub memcached ale zakładam że nie możesz go zainstalować jeśli nie możesz używać nawet bazy
https://www.php.net/manual/en/book.memcached.php

misio_
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 61
0

Ideą projektu, ma być jego mały rozmiar i prostota. To nie mój projekt tylko realizuję jeden z jego elementów dla zwierzchnika. Ale może warto by było pogadać ze zwierzchnikiem i zapytać czy nie dałoby rady użyć jednak DB 🙂

Marius.Maximus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2264
1

zalezy jak ma byc wyszukiwane w tym pliku, jak masz jeden klucz główny i tylko po tym szukasz to możesz podzielić plik na >3M plików
i to na pewno będzie szybsze

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3625
5

REDIS, Memcached jako bazy in memory. To byłoby standardowym podejściem. Natomiast możesz się uprzeć i plik z tym arrayem trzymać w RAM tworząc wirtualny dysk w RAM. Wtedy musisz zapewnić zasilanie przy rozruchu.
Wydaje mi się jednak, że problemem może być jakieś źle zrozumiane wymaganie.
Zastanów się na czym Ci zależy. Czy operacja naprawdę wymaga ładowania całej tablicy? Może użycie Generatora https://www.php.net/manual/en/language.generators.syntax.php coś pomoże?
Dlaczego nie możesz mieć np. REDIS? Jak aplikacja działa w Docker to tym bardziej mało roboty.
Może zwykły SQLLite wystarczy?

LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8536
3
misio_ napisał(a):

Ideą projektu, ma być jego mały rozmiar i prostota

Granica między prostotą a partyzantką jest cienka.

Ale może warto by było pogadać ze zwierzchnikiem i zapytać czy nie dałoby rady użyć jednak DB 🙂

A jakiego rodzaju dane tam masz i jakie dane chcesz wyciągać wg jakich kryteriów?

hzmzp
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 755
0

Zasadniczo skrypt będzie cały czas w RAM dopóki nie wykona wszystkich instrukcji do końca/wywalenia na błędzie. Jeżeli odpalasz go przez request http przez np Apache to będzie tam do zwrócenia wyniku (tj. w przypadku wcześniejszym) lub osiągnięcia limitu czasu wykonywania ustawionego w php.ini max_execution_time lub za pomocą set_time_limit

misio_
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 61
0

Dzięki, już sobie poradziłem.

Rozbiłem tablicę na 500 mniejszych tablic. Dzięki!

marian pazdzioch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 804
2
misio_ napisał(a):

Ideą projektu, ma być jego mały rozmiar i prostota. To nie mój projekt tylko realizuję jeden z jego elementów dla zwierzchnika. Ale może warto by było pogadać ze zwierzchnikiem i zapytać czy nie dałoby rady użyć jednak DB 🙂

O kurczaki zwierzchnik brzmi jak projekt na studia. Może niech zwierzchnik się ogarnie a nie wymyśla głupie ograniczenia?

LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8536
0
misio_ napisał(a):

Rozbiłem tablicę na 500 mniejszych tablic. Dzięki!

Jak będziesz to wyszukiwał potem? Jakoś zaindeksujesz te mniejsze tablice? Żeby było wiadomo jakie mniej więcej dane są w której tablicy?

marian pazdzioch napisał(a):

O kurczaki zwierzchnik brzmi jak projekt na studia.

To brzmi jak początek robienia własnej bazy danych.

serek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1516
0

A musisz od razu wczytywać całą tablicę? Może możesz użyć generatora (yield)? Albo: https://www.php.net/manual/en/book.ds.php

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.