2011-07-28 13 views
7

Powiel możliwe:
Array size too big - rubyCzy istnieje limit rozmiaru tablicy w ruby?

Przepraszam, jeśli ten został poproszony, Rozejrzałem się, ale naprawdę nie znaleźć to, czego szukałem.

Używam ruby ​​i mysql do utworzenia tablicy na podstawie pojedynczej kolumny w tabeli mysql. Tak na przykład, że mam kolumnę nazw użytkowników:

users = [] #declare array 
users.clear #clear array so that it remains so fresh and so clean on each restart 

# Update the list of users to follow 
res = dbh.query("SELECT user FROM usernameDB") 
while row = res.fetch_row do 
    users << row[0] #adds each user to the array 
end 

To teraz działało dobrze aż, kiedy zaczęliśmy otrzymywać bezpłatnego dużo większej liczby użytkowników. Teraz kod daje mi nieznane błędy.

Próbując rozwiązać problem, po prostu skomentowałem większość z nich i zbudowałem tablicę z zaledwie kilkoma nazwami użytkowników i wszystko działało ponownie. Moje pytanie brzmi: czy istnieje ograniczenie liczby lub przedmiotów w tablicy ruby?

Dzięki!

+2

Czy możesz zgłosić "nieznane błędy". – knut

+0

Mam podobny problem. Buduję tablicę z danymi z kwerendy ActiveRecord, a przy pewnych dużych rozmiarach zawiedzie lub przestanie działać. Jak wspomnieli inni, nie jest tak, że tablica jest zbyt duża - musi być coś innego. Całkowita długość mojej tablicy powinna kończyć się tysiącami, a nie milionami ... – Drew

Odpowiedz

4

Na Ruby nie obowiązuje ograniczenie oprogramowania, ale istnieje ograniczenie co do tego, w jakim stopniu proces ten może być obsługiwany. Jeśli masz normalny serwer domowy z serwerem Ruby, będzie on w stanie obsłużyć tablicę do momentu, aż tablica stanie się zbyt duża, w którym to momencie zacznie się "bagno", opóźnienie, awaria itd. Z drugiej strony, gdybyś miał bardzo potężny serwer korporacyjny, mógłby obsłużyć znacznie większą sieć, ale ostatecznie w końcu ulegałby awarii/opóźnieniu, gdyby tablica stała się zbyt duża dla procesu i sprzętu (pamięci) do obsługi.

Nie mam dla ciebie żadnych konkretnych liczb, ponieważ wszystko zależy od sprzętu i oprogramowania na serwerze.

+0

Działa na dreamhost. Przepraszam, jeśli to jest zła odpowiedź, jestem trochę nub do rubinów w ogóle. – bradleygriffith

+0

Nie ma problemu. To naprawdę zależy, jakie zasoby Dreamhost ma do dyspozycji dla swoich serwerów. Myślę, że możesz zbudować obszerną tablicę rozmiarów, ale wszystko, co obejmuje wiele elementów, może być za dużo. Po prostu zgaduj i sprawdź - a jeśli otrzymasz e-mail od Dreamhosta z pytaniem, dokąd idą jego zasoby serwera, nie wymieniaj mnie! :) – dwmcc

2

Zobacz inny wpis: Array size too big - ruby. Wielkość 600 milionów była zbyt duża, ale 500 milionów pracowało.

Jak duża jest macierz, z którą pracujesz? Problem może polegać na tym, że brakuje ci pamięci!

+0

istnieje 436 wierszy w tabeli, więc próbuję zbudować tablicę 436 nazw użytkowników. – bradleygriffith

+3

436 nazwy użytkownika to nic. Musi być coś innego. – Mchl

+0

To nie brzmi tak źle. Czy nadal się zawiesza, jeśli ograniczysz liczbę wyników zwracanych przez zapytanie do 50 za pomocą "SELECT TOP 50"? – danmcardle

Powiązane problemy