Мое требование как: Я хочу, чтобы выполнить частые операцию на миллионов объектов в многопоточной среде с параллелизма и масштабируемости имея в виду, мне нужно оптимальную структуру данных, пригодную для этого требования.Какая структура данных используется для хранения миллионов объектов в многопоточной среде (масштабируемость и производительность)?
Например:
public interface CarDetails {
public CopyOnWriteArrayList<Car> getAllCars();
public Car getMostSoldCars(int carModel);
public void addNewCarDetails(Car car);
public void oldCardDetails(Car car);
}
Первоначально я думал использовать Параллельное API, (CopyOnWriteArrayList), как его выполняет лучше по сравнению с внешней синхронизации списка (например: Collections.synchronizedList (список объектов)) ,
Проблема с CopyOnWriteArrayList: Чтобы хранить миллионы объектов в памяти и выполнения frequest операций на нем имеет влияние на производительность, потому что CopyOnWriteArrayList полностью создает новый список каждый раз, когда какой-либо Updation происходит на нем и выполнять такие операции прозводятся на миллионах объектов имеет проблемы с производительностью. Это полезно для нескольких читателей, но я ищу работу на большом количестве объектов.
Проблема с Collections.synchronizedList (объект списка): Внешняя синхронизация списка имеет другую проблему, поскольку она блокирует весь объект, который имеет другую проблему с производительностью.
Может ли кто-нибудь мне предложить, какие API-интерфейсы коллекции подходят для этого типа требований (параллелизм, масштабируемость, миллионы объектов, более высокая производительность при частой работе).
Заранее благодарен!
Вам, скорее всего, не нужно ничего лучше, чем обертка 'synchronizedList'. Вы действительно протестировали производительность этого решения? Кроме того, выбор абсолютно оптимальной структуры включает в себя гораздо больше деталей, чем вы предоставили, например: частота обновлений, отношение чтения к записи, фактический уровень параллелизма и т. Д. –
Порекомендуйте посмотреть 'concurrentHashMap' (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html)' ' – Hungry
test, ** test **, ** КОНТРОЛЬНАЯ РАБОТА**. Попробуйте все подходы и ** тест **. Как говорит @MarkoTopolnik, начните с самого простого решения и поэтапно улучшите - проверяя каждое «улучшение» с помощью тестов. Если 'synchronizedList' недостаточно хорош, напишите класс, который' реализует List' и завершает 'ArrayList' с помощью' ReentrantReadWriteLock'. –