Какой язык (языки) для очень больших списков? - PullRequest
2 голосов
/ 23 декабря 2008

Java (и, возможно, базовый код C-ish) имеет максимальную емкость Integer.MAX_VALUE (~ 2 миллиарда) для массивов и контейнеров в java.util. Существуют ли другие языки с контейнерами большей емкости?

Ответы [ 9 ]

13 голосов
/ 23 декабря 2008

Вам не нужны языки, вам нужны базы данных .

2 голосов
/ 23 декабря 2008

Контейнеры STL в C ++ используют индексы size_t, которые являются 64-битными на 64-битной машине.

2 голосов
/ 23 декабря 2008

Если вы начинаете превышать 32-битный предел числа по отношению к числу элементов, которые вы можете сохранить в списке / массиве / коллекции, тогда я бы серьезно начал искать новый способ реализации вашего алгоритма.

У вас будет множество требований типа «нам нужно это специализированное оборудование для выполнения нашей программы».

2 голосов
/ 23 декабря 2008

Вы можете написать свои собственные контейнеры на обоих языках, которые поддерживают индексы long.

1 голос
/ 23 декабря 2008

У вас есть машина с достаточным количеством оперативной памяти, чтобы использовать больше? О_о Если вы это сделаете, я бы сказал, что вам нужна ваша собственная коллекция, потому что производительность встроенных коллекций будет сомнительно ...

0 голосов
/ 23 декабря 2008

Никто не хочет одновременно справляться с такими большими объемами данных в памяти. Я не знаю, что вы пытаетесь сделать, но если вам нужно максимально увеличить объем резидентных данных, вы должны принять во внимание:

  • Первое использование динамического выделения памяти.
  • Вы можете попытаться (в вашей ОС) увеличить адресное пространство виртуальной памяти в пользовательском режиме, если это вариант. например 32-битная Windows может использовать типичные адресные пространства 2 ГБ / 2 ГБ для режима пользователя / ядра или 3 ГБ / 1 ГБ.
  • Всегда следите за лимитом объема памяти для фиксации / фиксации ОС, чтобы не вызывать перегрузку ОС, замедляя работу всей системы.
  • Вы можете заблокировать минимальный объем памяти для эксклюзивного использования вашего приложения. Это варьируется от ОС к ОС, но, например, вы можете дать пользователю возможность исправить 256 МБ, 512 МБ, 1 ГБ памяти для вашего приложения.
  • Если вам необходимо превзойти доступное адресное пространство пользовательского режима, в вашем распоряжении есть 64-разрядные системы или 32-разрядные с такими расширениями, как PAE.

Ну, есть много вещей, которые нужно исследовать, но только мой 2c.

0 голосов
/ 23 декабря 2008

База данных объектов может лучше соответствовать вашим целям.

Например, db4o .

Или, для массивов объектов фиксированного размера, возможно, стоит поэкспериментировать с отображенным в память файлом, но для этого вам потребуется языковой интерфейс с API-интерфейсом ОС.

edit: или просто используйте ORM для отображения вашей коллекции в стандартную базу данных SQL. Они существуют для большинства языков. Например, у ruby ​​есть activerecord, а у Java - hibernate.

0 голосов
/ 23 декабря 2008

Я обычно использую базу данных для хранения таких больших объемов данных. Решает много проблем с масштабированием.

0 голосов
/ 23 декабря 2008

Нет ограничений, если вы пишете свой собственный контейнер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...