Moje wymagania to:
- Trzeba mieć możliwość dynamicznego dodawania pól zdefiniowanych przez użytkownika dowolnego typu danych
- Trzeba mieć możliwość szybkiego wysyłania zapytań do UDF
- Musisz mieć możliwość wykonywania obliczeń na UDF na podstawie typu danych
- Trzeba mieć możliwość sortowania UDF na podstawie typu danych
Inne informacje:
- Szukam przede wszystkim wydajności
- Istnieje kilka milionów rekordów głównych, do których można dołączyć dane UDF
- Kiedy ostatnio sprawdzałem, w naszej aktualnej bazie danych było ponad 50 milionów rekordów UDF
- W większości przypadków UDF jest przypisany tylko do kilku tysięcy rekordów Master, a nie do wszystkich
- UDF nie są łączone ani używane jako klucze. To tylko dane używane do zapytań lub raportów
Opcje:
Utwórz dużą tabelę za pomocą StringValue1, StringValue2 ... IntValue1, IntValue2, ... itd. Nienawidzę tego pomysłu, ale rozważę go, jeśli ktoś może mi powiedzieć, że jest lepszy niż inne pomysły i dlaczego.
Utwórz dynamiczną tabelę, która w razie potrzeby dodaje nową kolumnę na żądanie. Nie podoba mi się również ten pomysł, ponieważ uważam, że wydajność byłaby wolna, gdyby nie zindeksowanie każdej kolumny.
Utwórz pojedynczą tabelę zawierającą UDFName, UDFDataType i wartość. Po dodaniu nowego UDF wygeneruj widok, który pobiera tylko te dane i analizuje je na dowolny określony typ. Elementy, które nie spełniają kryteriów analizy, zwracają wartość NULL.
Utwórz wiele tabel UDF, po jednej na typ danych. Więc mielibyśmy tabele dla UDFStrings, UDFDates, itp. Prawdopodobnie zrobiłoby to samo co # 2 i automatycznie wygenerowałoby widok za każdym razem, gdy zostanie dodane nowe pole
XML DataType? Nie pracowałem z nimi wcześniej, ale widziałem je wspomniane. Nie jestem pewien, czy dałyby mi oczekiwane wyniki, zwłaszcza jeśli chodzi o wydajność.
Coś innego?