Mam tabelę organizacji takiego:wyszukiwania danych z dynamicznych tabel przy użyciu Microsoft SQL Server
OrgID | OrgInviteCode | OrgName | Status | ProjectTableName | InsertOn
-------------------------------------------------------------------------------------------
1 | RC12T67 | Organization1 | Active | Project1 | 2015-12-19 15:37:43.333
2 | BC56uI7 | Organization2 | Active | Project2 | 2015-12-19 15:37:43.333
3 | ORG1456 | Organization3 | Active | Project3 | 2015-12-19 15:37:43.333
4 | ORG2856 | Organization4 | Active | Project4 | 2015-12-19 15:37:43.333
I mam procedurę przechowywaną, aby stworzyć dynamiczny stół do projektu.
Jeśli jakakolwiek nowa organizacja zostanie pomyślnie utworzona, wywołujemy procedurę składowaną w celu utworzenia tabeli projektu dla tej organizacji.
Każda organizacja ma swoją własną tabelę projektów. Tak więc nazwa tabeli projektu jest dynamiczna dla każdego org i jego nazwa jest przechowywana w tabeli organizacji.
Organization1 -> tabela Projekt
ProjectID | OrgID | ProjectName | ProjectInvideCode | Address1 | Address2 | City |State | ZIP | Country
-------------------------------------------------------------------------------------------------------------------------------
1 | 1 | Org1Proj1 | XJ34590 | 235 Harrison St. | | Syracuse | AK | 23456234 | US
2 | 1 | Org1Proj2 | JKI8907 | 35 Sterling St. | | Syracuse | NY | 23456456 | US
Organization2 -> tabela Projekt
ProjectID | OrgID | ProjectName | ProjectInvideCode | Address1 | Address2 | City |State | ZIP | Country
-------------------------------------------------------------------------------------------------------------------------------
1 | 2 | Org2Proj1 | RUIO90 | 90 Ram St. | | Los Angeles | CA | 23456234 | US
2 | 2 | Org2Proj2 | KLOP907 | 35 Wide St.| | Chicago | IL | 23456456 | US
Obecnie pracuję w integracji funkcji wyszukiwania. Użytkownicy lub użytkownicy anonimowi mogą wyszukiwać dane na podstawie poniższej logiki:
- Wyszukaj za pomocą nazwy organizacji lub kodu zapraszającego organizacji.
- Wyszukaj za pomocą nazwy projektu lub kodu zaproszenia do projektu.
- Szukaj z adresem projektu, miasto, województwo, kraj
Wiem, że to bardzo proste, aby znaleźć wyniki wyszukiwania dla nazwy organizacji i zaprosić kod, bo cała zawartość jest przebywa w tej samej tabeli.
Ale bardziej skomplikowane jest uzyskanie wyniku wyszukiwania dla projektów (nazwa lub kod zaproszenia) z powodu dynamicznej nazwy tabeli. Znalazłem ten link w How to fetch data from dynamic multiple tables?, więc myślę, że to nie jest lepsze rozwiązanie, ponieważ wyszukiwanie musi być bardzo szybkie.
Powód, dla którego rozdzielamy tabele projektów na podstawie organizacji, ponieważ w naszym wymaganiu wyraźnie mówią, że "Mamy 1000000 organizacji, ale każda organizacja ma ponad 1 milion projektów". Mam nadzieję, że rozumiesz pojęcie, że nie chcemy zrzucać projektów 1000000 (organizacja) * 1 milion = XXXXXX w jednej tabeli.
Pytania:
- Jak możemy przeglądać dane projektów w efektywny sposób?
- Czy koncepcja oddzielnego stołu w naszym projekcie jest najgorsza? Czy masz jakieś sugestie, aby poradzić sobie w dużo lepszym?
- Czy jest jakiś skuteczny sposób w C#?
Narzędzia i Technologia:
- Asp.Net 4.5, C#
- MVC pierwszy kod 5
- Entity Framework
- SQL Server 2012
Z ciekawości, dlaczego nie chcesz zrzucić organizacji 1M z 1 milionami projektów w jedną tabelę? Mam na myśli, że brzmi jak wiele danych, więc zamiast hackowania z SQL Server i tabele 1T, może potrzebujesz zamiast tego rozproszone architektury bazy danych wysokiej wydajności? –
@KeithPayne AFAIK nie ma sensu utrzymywać tych danych w jednej tabeli. Wiemy już, że dane są dużo większe, więc budując od zera, musimy zaprojektować bazę danych pod względem danych, skalowalności, wydajności itp. – Chandru
Ile stołów planujesz? 1 milion organizacji x 1 milion projektów = 1 trylion. Czy chcesz zaprojektować system do obsługi 1 biliona stołów? Czy sprawdziłeś specyfikacje na maksymalnych SQL Server? A następnie, jak indeksować twoją listę stołów? Uporządkowany indeks musi być gdzieś przechowywany, aby można było powiązać tabelę z projektem org +. Gdzie będzie przechowywany indeks? –