2016-04-13 6 views
0

Ich versuche, Zeitstempel Spalte auf einem azurblauen Tabellenspeicher abzufragen. Ich habe eine Where-Bedingung, die prüft, ob der Eingabewert größer als der Zeitstempelwert ist. Die azurblaue Timestamp-Spalte ist kein Partitionsschlüssel oder Zeilenschlüssel. Ich erfuhr, dass die Abfrage einer Spalte, die kein Partitions- oder Zeilenschlüssel ist, die Leistung der Abfrageausführung verringert. Meine Anwendung ist sehr langsam, wenn es mehr und mehr Datensätze gibt. Ich habe versucht, Zeitstempel Daten zu Partition Schlüsseldaten verschieben, aber Partition Schlüssel nicht akzeptiert Zeitstempel Wert wie "4/13/2016 5:20:03 AM + 00: 00". Was wäre die beste Option, um die Abfrageleistung zu erhöhen?Abfrageausführung auf Azure-Speicher ist sehr langsam

Antwort

5

Wie Sie bereits erwähnt haben, wenn eine Abfrage PartitionKey und/oder RowKey nicht enthält, werden die Abfragen langsam sein, da der Tabellenservice den vollständigen Tabellenscan durchführt. Empfehlung wäre, den Datums-/Uhrzeitwert als PartitionKey Wert zu verwenden.

ich versuchte Zeitstempel-Daten zu bewegen, Schlüsseldaten zu unterteilen, sondern Partition Schlüssel akzeptieren Zeitstempelwert nicht wie „2016.04.13 05.20.03 +00: 00“

Dies liegt daran, dass der Wert Zeichen enthält, die nicht zulässig sind (https://msdn.microsoft.com/en-us/library/azure/dd179338.aspx -> siehe Abschnitt Characters Disallowed in Key Fields).

Im moment gibt es tatsächlich eine Reihe von Dingen, die Sie tun könnten, dieses Problem zu lösen:

  • Sie können Ihre Zeit/Datum Wert in YYYY-MM-DDThh:mm:ss Format formatiert werden.
  • Sie können den Datums-/Uhrzeitwert in Ticks umwandeln und einige Nullen voranstellen und diese für PartitionKey speichern. Etwas wie:

    PartitionKey Wert = YourDateTimeValue.Ticks.ToString ("d19");

Wenn Sie die neuesten Einträge wollen auf die Spitze kommen, könnten Sie so etwas wie: https://azure.microsoft.com/en-in/documentation/articles/storage-table-design-guide/:

PartitionKey Value = (DateTime.MaxValue.Ticks - YourDateTimeValue.Ticks).ToString("d19"); 

Sie auch diese nützlich finden können.

+0

zu diesem Satz "Zeichen in Schlüsselfeldern nicht erlaubt", sehe ich einige Speichertabellen mit Zeichen. Einschränkung für Zeichen oder für Sonderzeichen? – Kurkula