2014-11-24 16 views
5

Mam ponad 1 miliard przedmiotów z około 1000 kolumn (macierz). Ale dla 95% kolumn stosunek wartości unikalnych jest mniejszy niż jeden procent, więc dane te można sklasyfikować jako rzadkich danych.Java: jak efektywnie przechowywać rzadkie dane

Co to jest wydajne i gotowe do użycia rozwiązanie do przechowywania takich danych w Javie?

+0

jakie operacje należy wykonywać na tych danych? –

+0

Cóż, używaj rozrzedzonych plików? – fge

+0

@DavidSoroko Przechowuj i pobierz. Nic więcej. Cała reszta odbywa się za pośrednictwem indeksów. –

Odpowiedz

0

Dobrze myślę HashTable byłoby najlepszym rozwiązaniem, aby to zrobić ... key-value para jest skuteczny dla samego value czyli jeden key dla wielu value s.

1

Nie jestem pewien, czy to przemyślałeś. Jeśli naprawdę masz miliardy wierszy, nawet jeśli znajdziesz mechanizm do przechowywania macierzy rzadkiej wydajnie, możesz mieć problemy z utrzymaniem tak dużej ilości danych w pamięci.

Można jednak użyć prostej mapy, której kluczem jest Pair, która zawiera wiersz i kolumnę dla bazy danych.

public class Pair<P, Q> { 

    public final P p; 
    public final Q q; 

    public Pair(P p, Q q) { 
     this.p = p; 
     this.q = q; 
    } 

    // TODO: Implement equals and hashCode. 
} 

class Datum { 
} 
// My sparse database. 
Map<Pair<Integer, Integer>, Datum> data = new HashMap<>(); 

Przydałoby się to przy minimalnym przechowywaniu, ale niekoniecznie rozwiązuje problem.

Powiązane problemy