사실적인 소셜 네트워크 (Facebook)를 모델로 시도하고 있습니다. 저는 컴퓨터 과학 대학원생으로서 기본적인 데이터 구조와 알고리즘을 이해하고 있습니다.수천만 명의 사용자가있는 현실적인 소셜 네트워크 모델. 어떤 기술을 사용해야합니까?
아이디어 :
나는이 프로젝트를 자바에서 시작했다. 내 아이디어는 여러 사용자 영역을 만드는 것입니다. 주어진 영역의 각 사용자는 주어진 평균을 중심으로 정규 분포를 갖는 임의의 수의 친구를 갖게됩니다. 각 사용자는 해당 지역의 "친구"가 속한 큰 비율 또는 클러스터를 갖게됩니다. 그들의 "친구"의 나머지 부분은 몇 가지 다른 무작위 영역에서 작은 클러스터 것입니다.
초기 구조
나는 "친구"
ArrayList<User> friends
의 ArrayList를 잡고 사용자 ArrayList<User> users
의 ArrayList를 각 사용자를 들고 각 지역으로 지역의 ArrayList를
ArrayList<Area> areas
을 만들고 싶었
거기에서 나는 각 지역 및 해당 지역의 각 사용자를 거쳐 그 지역의 친구들 대부분에게 w 몇 가지 무작위 영역에서 몇 친구로 ell. 내 데이터 세트가 작은 한 충분히 쉽습니다.
문제 : 나는 큰 데이터 세트를 만들려고 할 때
, 내가 인해 힙에서 더 이상 메모리에 OutOfMemoryError를 얻을. 이제는 지역 당 1 백만 명의 사용자가있는 30 개의 Area와 사용자 당 200 명의 친구를 만들고 싶다면이 일을하는 것이 불가능할 것입니다. 나는 1 Area와 거의 2 GB를 먹는다. .. 그래서 지금 무엇. 내가 미리 모든 사용자를 생성 한 다음 각 사용자에게 친구를 제공하면 알고리즘이 작동합니다. 하지만 먼저 영역과 사용자가 필요합니다. 지역에 사용자가 있어야 "친구"가 될 수 있습니다.
다음 단계 : 내 알고리즘을 좋아
, 그것은 간단하고 이해하기 쉽습니다. 필자가 필요로하는 것은이 데이터를 저장하는 더 좋은 방법입니다. 메모리에 저장하고 보관할 수 없기 때문입니다. 나는 각 사용자에 대해 사용자가 속한 영역뿐만 아니라 몇 가지 임의의 영역에도 액세스해야 할 필요가 있습니다.
내 질문 :
1.이 데이터를 넣어야하는 기술/데이터 구조. 결국 나는 기본적으로 사용자 -> 친구 관계가 필요합니다. "지역"아이디어는이 관계를 현실로 만드는 방법입니다.
2. 다른 언어를 모두 사용해야합니까? 나는 Lucene, Hadoop 등과 같은 기술이 Java로 만들어졌고 많은 양의 데이터에 사용된다는 것을 알고 있습니다 ... 그러나 새로운 것을 무언가를 배우기 전에 나는 그것을 사용한 적이 없으며 몇 가지 지침을 원합니다.
3. 어디서부터 시작해야합니까? 분명히 메모리의 데이터와 함께 java 만 사용할 수는 없습니다. 그러나 사용자에게 친구 목록을 제공하려면 이러한 사용자 영역을 만들어야합니다.
준결승 읽기에 대한 죄송하지만 정확한 위치로 나를 안내 할 수 있기를 바랍니다. 이 주제에 대해 읽거나 도움을 주신 모든 분들께 감사드립니다.
에 여기서 뭐하는과에 같은 추가 좋은 정보를 많은 링크가 꽤 많이 있습니다 호환되지 않는.당신은 두 가지 옵션을 가지고 있습니다 : 여전히 "메모리에서"일하지만 자바 객체를 사용하지 않을 것입니다. (Trove는 여기서 도움이 될 것입니다. int에서 사용자 ID로 각 사용자를 표현할 수 있다면 Trove의 TIntArrayList **는 Java의 ArrayList를 깊게합니다. 자바 객체를 사용하지 않고 효율적인 프리미티브를 사용하기 때문에 엉덩이에서). 이 첫 번째 옵션은 "수천만"은 아니지만 "수백만 개"가 아닐 수도 있습니다. 두 번째 옵션 : DB를 사용하십시오. 선택의 여지가 많습니다. 그러나 POJOs, 당신은 실제로 그것에 대해 잊을 수 있습니다. – Gugussee
64 비트 Java를 사용하고 메모리를 충분히 높게 설정 했습니까? 이것이 올바른 해결책이라고 말할 수는 없지만 모든 것을 메모리에 유지할 수 있습니다. –
Gugussee 감사합니다. Trove의 TIntArrayList를 확실히 살펴 보겠습니다. 가능한 한 확장 성이 좋기 때문에 어떤 종류의 DB가 나를 위해 가장 잘 작동 할 것입니다. 64 비트 VM의 경우, 어느 정도까지는 작동 할 수 있지만 그 솔루션이 얼마나 확장 성이 있는지는 잘 모르겠습니다. – Eddie