Project

General

Profile

Actions

bug #2851

open

Check ordering in API paged methods

Added by Andreas Müller about 12 years ago. Updated about 2 years ago.

Status:
Discussed
Priority:
Highest
Category:
cdmlib
Target version:
Start date:
Due date:
% Done:

0%

Estimated time:
Severity:
normal
Found in Version:

Description

Paging API method call results may cause problems if the result is not ordered. We need to check our methods and fix them if needed.


Related issues

Related to EDIT - bug #9948: Search result contains only 24 items and the next page starts with the 26th resultClosedAndreas Müller

Actions
Related to EDIT - bug #9943: webservice portal/agent delivers wrong page contentClosedAndreas Müller

Actions
Actions #1

Updated by Andreas Müller about 12 years ago

Stimmt, da haste Recht! Ich hatte lediglich an den recht einfachen Fall select * from gedacht.

Eine Lösung wäre bei allen toMany Relations @OrderBy(titleCache) oder @OrderBy(id) hinzu zufügen.

Andreas

----Ursprüngliche Nachricht-----

Von: Müller, Andreas

Gesendet: Freitag, 9. März 2012 11:41

An: Kohlbecker, Andreas

Betreff: AW: Ordering in paged methods

Hi Andreas,

Dass sehe ich nicht so und habe es auch schon erlebt. Zwar stimmt es in aller Regel, dass das DBMS bei 2 gleichen Anfragen diese in der gleichen Reihenfolge zurückgibt, aber wenn kein Order BY angegeben ist, wird dir kein DBMS die Garantie geben, dass das so sein muss.

Da sortieren ein sehr teuerer Prozess, versucht das DBMS zu umgehen, sich um Sortierung kümmern zu müssen und produziert die Daten in einfachsten Art und Weise. Wenn du z.B. ein WHERE statement hast mit WHERE id IN (a,b,c) kommt i.d.R. etwas anderes heraus als WHERE id IN (c,a,b). D.h. hier wird sich nicht am PK orientiert, während das in anderen Fällen der Fall ist. Auch kann LIMIT 100000 zu anderen Ergebnissen führen als LIMIT 10 da der Optimierer vielleicht einen anderen Execution Plan wählt und somit die Datenstrom Pipeline zuerst andere Daten ausspuckt.

In den allermeisten Fällen und insbesondere beim Paging über gleiche Partitionsgrößen und quasi unveränderte Daten hast du zwar sicherlich Recht, aber sicherer fände ich es schon, wenn wir ein festdefiniertes Verhalten vorgeben.

Können wir ja mal mündlich besprechen.

AM

----Ursprüngliche Nachricht-----

Von: Kohlbecker, Andreas

Gesendet: Freitag, 9. März 2012 10:25

An: Müller, Andreas

Betreff: AW: Ordering in paged methods

Hallo Andreas,

ich nehme an solange kein explizites "order by" in hql oder als criteria angegeben ist wird hibernate in das sql statement auch kein order by einbauen. Das heißt es steht im diesem Fall der Datenbank frei zu sortieren wie diese gerne möchte. MysQL sortiert per default nach dem PK. Alle Datenbanken haben da mit Sicherheit irgendeine Defaultsortierreihenfolge, ansonsten müsste man immer wenn man LIMIT oder ähnliches verwendet gezwungenermaßen ein order by angeben, was ja nicht der Fall ist. Service seitig sind wir damit auf der sicheren Seite was das Paging betrifft.

Andreas

----Ursprüngliche Nachricht-----

Von: Müller, Andreas

Gesendet: Montag, 5. März 2012 14:46

An: Kohlbecker, Andreas

Betreff: Ordering in paged methods

Hi Andreas,

Da du wohl krank bist, diese Anfrage per Mail:

Ich habe festgestellt, dass es in der Service Layer öfters Methoden gibt die zwar Partitionen oder Pages zurückgeben, aber keine Hinweise zum Ordering enthalten. Das verstehe ich nicht ganz, da ein Paging doch nur möglich ist, wenn ich eine definierte Reihenfolge habe.

Z.B: wie garantiere ich in DescriptionDaoImpl.getTaxonDescriptions(xxx), page 2 die Records zurückgibt, die nach Page 1 folgen. Sortiert Hibernate automatisch nach id, wenn es sonst kein Kriterium gibt?

Dies ist dringend für mich, da wir das im PESI Export regelmäßig über die Gesamtheit aller Partitionen iterieren und ich sicherstellen muss, dass damit auch wirklich alle Records abgedeckt sind und gleichzeitig keine Duplikate entstehen.

Viele Grüße,

Andreas M.

Actions #2

Updated by Andreas Müller over 2 years ago

  • Description updated (diff)
Actions #3

Updated by Andreas Müller about 2 years ago

  • Status changed from New to Discussed
  • Priority changed from Priority13 to Highest
  • Target version changed from cdmlib - Old Next Major Release to Release 5.45

If this is still an open issue it is urgent.

Actions #4

Updated by Andreas Müller about 2 years ago

  • Private changed from Yes to No
Actions #5

Updated by Andreas Müller about 2 years ago

  • Related to bug #9948: Search result contains only 24 items and the next page starts with the 26th result added
Actions #6

Updated by Andreas Müller about 2 years ago

  • Related to bug #9943: webservice portal/agent delivers wrong page content added
Actions #7

Updated by Andreas Müller about 2 years ago

  • Tags set to 5.30
Actions #8

Updated by Andreas Müller about 2 years ago

  • Tags deleted (5.30)
Actions

Also available in: Atom PDF