DE112011105774T5 - Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt - Google Patents

Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt Download PDF

Info

Publication number
DE112011105774T5
DE112011105774T5 DE112011105774.1T DE112011105774T DE112011105774T5 DE 112011105774 T5 DE112011105774 T5 DE 112011105774T5 DE 112011105774 T DE112011105774 T DE 112011105774T DE 112011105774 T5 DE112011105774 T5 DE 112011105774T5
Authority
DE
Germany
Prior art keywords
memory
data
data structure
relocatable
operator
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE112011105774.1T
Other languages
English (en)
Other versions
DE112011105774B4 (de
Inventor
Goetz Graefe
Terence P. Kelly
Robert E. Tarjan
Harumi Kuno
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hewlett Packard Enterprise Development LP
Original Assignee
Hewlett Packard Development Co LP
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hewlett Packard Development Co LP filed Critical Hewlett Packard Development Co LP
Publication of DE112011105774T5 publication Critical patent/DE112011105774T5/de
Application granted granted Critical
Publication of DE112011105774B4 publication Critical patent/DE112011105774B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C15/00Digital stores in which information comprising one or more characteristic parts is written into the store and in which information is read-out by searching for one or more of these characteristic parts, i.e. associative or content-addressed stores
    • G11C15/04Digital stores in which information comprising one or more characteristic parts is written into the store and in which information is read-out by searching for one or more of these characteristic parts, i.e. associative or content-addressed stores using semiconductor elements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C19/00Digital stores in which the information is moved stepwise, e.g. shift registers
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C19/00Digital stores in which the information is moved stepwise, e.g. shift registers
    • G11C19/18Digital stores in which the information is moved stepwise, e.g. shift registers using capacitors as main elements of the stages
    • G11C19/182Digital stores in which the information is moved stepwise, e.g. shift registers using capacitors as main elements of the stages in combination with semiconductor elements, e.g. bipolar transistors, diodes
    • G11C19/188Organisation of a multiplicity of shift registers, e.g. regeneration, timing or input-output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C19/00Digital stores in which the information is moved stepwise, e.g. shift registers
    • G11C19/28Digital stores in which the information is moved stepwise, e.g. shift registers using semiconductor elements
    • G11C19/287Organisation of a multiplicity of shift registers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Power Engineering (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Dram (AREA)
  • Static Random-Access Memory (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Read Only Memory (AREA)

Abstract

Ein verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, setzt eine eingebaute Datenverschiebungsfähigkeit ein. Der verschiebbare Speicher weist einen Speicher mit eingebauter Verschiebungsfähigkeit auf, um einen zusammenhängenden Datenteilsatz von einem ersten Ort an einen zweiten Ort in dem Speicher zu verschieben. Der verschiebbare Speicher weist weiterhin eine Datenstruktur auf, die auf dem Speicher definiert ist, um Daten zu enthalten, die den zusammenhängenden Teilsatz umfassen. Die eingebaute Verschiebungsfähigkeit des Speichers erleichtert die Bewegung der Daten, das Einfügen der Daten und/oder das Löschen der Daten in der Datenstruktur.

Description

  • QUERVERWEIS AUF VERWANDTE ANMELDUNGEN
  • Nicht zutreffend
  • ERKLÄRUNG BEZÜGLICH STAATLICH GEFÖRDERTER FORSCHUNG ODER ENTWICKLUNG
  • Nicht zutreffend
  • HINTERGRUND
  • Moderne Computer und zugehörige Verarbeitungssysteme weisen in der Regel einen Prozessor und eine Form von Speicher auf. Der Prozessor ist im Allgemeinen für das Durchführen der verschiedenen Rechenaufgaben des Computers verantwortlich, während der Speicher Daten speichert, die in den Rechenaufgaben verwendet und von diesen erzeugt werden. Die Aufteilung der Architektur in Bezug auf das Verarbeiten durch den Prozessor und die Datenspeicherung durch den Speicher hat sich in nahezu der gesamten Geschichte derartiger Systeme als erfolgreich erwiesen.
  • Ein typischer Universalcomputer beispielsweise weist gewöhnlich eine Zentraleinheit (central processing unit, CPU) und einen Hauptspeicher auf, die über einen oder mehrere Kommunikationskanäle (z. B. Daten-, Befehls- und Adressbusse) miteinander kommunizieren. In der Regel stellt die CPU Einrichtungen bereit, um verschiedene arithmetische und logische Operationen durchzuführen, eine Arbeitsablaufsteuerung bereitzustellen und anderweitig Aspekte des Universalcomputers zu steuern. Praktisch alle CPU stellen beispielsweise Funktionen oder Operationen zum Lesen von Daten aus einem Speicher, Schreiben von Daten in einen Speicher und Ausführen von Programmen bereit, die einen Satz Anweisungen umfassen, der die Daten nutzt, um eine vorher definierte Aufgabe durchzuführen. Darüber hinaus können CPU Ein-/Ausgabe (E/A) abwickeln, was eine Kommunikation mit peripheren Geräten sowie Subsystemen außerhalb des Universalcomputers ermöglicht. CPU können sogar in einigen Beispielen eine Grafikverarbeitung bereitstellen, um das Erzeugen und Aktualisieren einer grafischen Anzeigeeinheit (z. B. eines Monitors) abzuwickeln.
  • Im Gegensatz dazu stellt der Hauptspeicher moderner Computer, der einen statischen Direktzugriffspeicher (static random access memory, SRAM), einen dynamischen Direktzugriffsspeicher (dynamic random access memory, DRAM), einen Festwertspeicher (read-only memory, ROM), einen programmierbaren Festwertspeicher (programmable read-only memory, PROM), einen Flash-Speicher und/oder eine Vielfalt anderer Speichertypen beinhalten kann, in der Regel einen verhältnismäßig begrenzten Satz von Fähigkeiten bereit. Die Hauptfähigkeit dieser Fähigkeiten ist das Speichern von Computerprogrammen und Daten, die von der CPU ausgeführt und verwendet werden. Zu anderen eingeschränkten Fähigkeiten, die in dem Hauptspeicher moderner Computer vorgefunden werden können oder oftmals mit diesem assoziiert sind, zählen bestimmte Speicherverwaltungsfunktionen. DRAM-Speichersubsysteme eines Hauptspeichers können beispielsweise über Schaltkreise zum automatischen Auffrischen von darin gespeicherten Daten verfügen.
  • Die historische Aufteilung der Architektur in Bezug auf das Verarbeiten im Prozessor und die Speicherung im Speicher erzeugt jedoch bestimmte Probleme und wirft praktische Probleme zur Implementierung auf, die mit der Zeit zunehmend offensichtlich werden. Insbesondere kann die herkömmliche Aufteilung der Architektur, die die gesamte Verarbeitung in der CPU zentralisiert, während der Hauptspeicher dazu degradiert wird, die Speicherung bereitzustellen, Probleme aufweisen und tut dies auch, insbesondere bei Betrachtung von unter Verwendung von Datenstrukturen gespeicherten und bearbeiteten Daten.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Verschiedene Merkmale von Beispielen gemäß den hierin beschriebenen Grundsätzen können unter Bezugnahme auf die folgende ausführliche Beschreibung in Verbindung mit den begleitenden Zeichnungen einfacher verstanden werden, wobei gleiche Bezugsziffern gleiche Strukturelemente bezeichnen und wobei in den Zeichnungen:
  • 1A ein Beispiel einer Downshift (Verschiebung nach unten) eines zusammenhängenden Datenteilsatzes, der in einem linearen Feld in einem verschiebbaren Speicher gespeichert ist, gemäß einem Beispiel gemäß den hierin beschriebenen Grundsätzen darstellt.
  • 1B stellt ein Beispiel einer Upshift (Verschiebung nach oben) eines zusammenhängenden Datensatzes, der in einem linearen Feld in einem verschiebbaren Speicher gespeichert ist, gemäß einem Beispiel gemäß den hierin beschriebenen Grundsätzen dar.
  • 2 stellt ein Blockdiagramm eines verschiebbaren Speichers, der In-Memory-Datenstrukturen (im Speicher befindliche Datenstrukturen) unterstützt, gemäß einem Beispiel der hierin beschriebenen Grundsätze dar.
  • 3 stellt eine Wahrheitstabelle eines erweiterten Decodierers gemäß einem Beispiel der hierin beschriebenen Grundsätze dar.
  • 4A stellt ein schematisches Diagramm eines Teils eines beispielhaften B+-Baums gemäß einem Beispiel der hierin beschriebenen Grundsätze dar.
  • 4B stellt den beispielhaften B+-Baum von 4A gemäß einem anderen Beispiel der hierin beschriebenen Grundsätze dar.
  • 5A stellt ein Blockdiagramm eines verschiebbaren Speichersystems mit In-Memory-Datenstruktur-Unterstützung gemäß einem Beispiel der hierin beschriebenen Grundsätze dar.
  • 5B stellt ein Blockdiagramm eines verschiebbaren Speichersystems mit In-Memory-Datenstruktur-Unterstützung gemäß einem anderen Beispiel der hierin beschriebenen Grundsätze dar.
  • 6 stellt ein schematisches Diagramm einer In-Memory-Datenstruktur vor und nach Datendrehung gemäß einem Beispiel der hierin beschriebenen Grundsätze dar.
  • 7 stellt ein Ablaufschema eines Verfahrens eines verschiebbaren Speichers mit In-Memory-Datenstrukturen gemäß einem Beispiel der hierin beschriebenen Grundsätze dar.
  • Bestimmte Beispiele haben andere Merkmale, die zusätzlich zu und anstelle von den in oben angeführten Figuren dargestellten Merkmalen sind. Diese und andere Merkmale sind im Folgenden unter Bezugnahme auf die oben angeführten Figuren ausführlich beschrieben.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Beispiele gemäß den hierin beschriebenen Grundsätzen stellen In-Memory-Datenstrukturen (im Speicher befindliche Datenstrukturen) und damit assoziierte Datenstruktur-Operationen in einem Speicher mit eingebauter Datenverschiebungsfähigkeit bereit. Insbesondere ist die Datenverschiebungsfähigkeit gemäß verschiedenen Beispielen der hierin beschriebenen Grundsätze im Wesentlichen in den Speicher eingebaut. Die eingebaute Datenverschiebungsfähigkeit stellt eine Umsetzung oder Verschiebung (Shift) eines zusammenhängenden Datenteilsatzes, der in dem Speicher gespeichert ist, bereit, während die Datenstruktur eine Organisierung der gespeicherten Daten bereitstellt, die durch die Datenstruktur-Operationen bearbeitet werden. Beispiele gemäß den hierin beschriebenen Grundsätzen finden Anwendung auf eine Vielfalt von Datenverarbeitungssystemen.
  • Gemäß verschiedenen Beispielen kann der zusammenhängende Teilsatz gespeicherter Daten (z. B. Datenwörter) in dem Speicher von einem ersten oder Anfangsort des Speichers zu einem zweiten oder Endort in dem Speicher verschieben werden. Die Daten bewahren gemäß einigen Beispielen eine geordnete Beziehung in dem zusammenhängenden Teilsatz, wenn sie an den zweiten Ort verschoben werden. Darüber hinaus findet die Verschiebung komplett in dem Speicher statt und die Verschiebung wird im Allgemeinen ohne Verwendung von Ressourcen, wie einem Prozessor, die sich außerhalb des Speichers befinden, erzielt. Des Weiteren beinhaltet die Verschiebung gemäß verschiedenen Beispielen kein Bewegen von Daten zwischen einem Prozessor und dem Speicher. Infolgedessen wird der Speicher mit eingebauter Verschiebungsfähigkeit hierin als „verschiebbarer Speicher” bezeichnet.
  • In einigen Beispielen kann die Verschiebung, die hierin von dem verschiebbaren Speicher bereitgestellt wird, dazu eingesetzt werden, einen Ort in dem Speicher zu „öffnen”, in den neue Daten eingefügt werden können. Insbesondere kann während einer Operation an einer Datenstruktur ein Speicherort entweder über oder unter dem zusammenhängenden Teilsatz gespeicherter Daten zur Dateneinfügung verfügbar gemacht werden, wenn der zusammenhängende Teilsatz gespeicherter Daten durch die Verschiebung in dem verschiebbaren Speicher bewegt wird. Dann können Daten beispielsweise als ein weiterer Teil der Datenstruktur-Operation in die Öffnung hinzugefügt oder eingefügt werden.
  • Gemäß anderen Beispielen kann die Verschiebung dazu verwendet werden, Daten zu löschen oder zu „überschreiben”, die über einem Beginn des zusammenhängenden Teilsatzes oder unter einem Ende des zusammenhängenden Teilsatzes gespeichert sind. Insbesondere können während einer Datenstruktur-Operation die Daten, die über oder unter dem zusammenhängenden Teilsatz gespeichert sind, mit einem Teil des zusammenhängenden Teilsatzes selbst überschrieben werden, wenn die zusammenhängenden Daten durch den verschiebbaren Speicher verschoben werden. Wenn beispielsweise der zusammenhängende Teilsatz gespeicherter Daten Teil einer größeren Datenstruktur (z. B. eines Felds von Datenwörtern) in dem verschiebbaren Speicher ist, kann die Verschiebung die Wirkung des Löschens eines Teils der Daten (z. B. ein oder mehrere Datenwörter) in der größeren Datenstruktur als Teil der Datenstruktur-Operation haben.
  • Gemäß einigen Beispielen kann das Verschieben von Daten, um entweder Daten in dem verschiebbaren Speicher einzufügen oder zu löschen, in weniger Zeit und in einigen Beispielen in erheblich weniger Zeit erzielt werden, als im Allgemeinen ohne Verwenden eines verschiebbaren Speichers möglich ist. Im Gegensatz dazu erfordert ein herkömmlicher Speicher, der sich auf einen Prozessor stützt, um beispielsweise eine Verschiebung durchzuführen, im Allgemeinen einen Zeitraum, der proportional zu einer Menge der verschobenen Daten ist. Das Verschieben von Daten in einem herkömmlichen Speicher beinhaltet beispielsweise in der Regel, dass der Prozessor die zu verschiebenden Daten liest und dann die Daten zurück in den Speicher an einem anderen Ort schreibt. Das Lesen und das Schreiben können von dem Prozessor beispielsweise auf einer Wort-für-Wort-Basis aufgrund der Struktur und der Funktionalität des herkömmlichen Speichers durchgeführt werden. Da jedes Datenwort in den verschobenen Daten erst durch den Prozessor aus dem herkömmlichen Speicher gelesen und dann anschließend zurück in den herkömmlichen Speicher geschrieben wird, ist die Zeit zum Verschieben der Daten beispielsweise im Allgemeinen proportional zu der Menge oder der Länge der verschobenen Daten (z. B. Anzahl der Datenwörter). Je größer die Datenmenge ist, desto länger dauert die Verschiebungsoperation.
  • Darüber hinaus stützt ein herkömmlicher Speicher sich auf eine Ressource (z. B. den Prozessor), der zu dem herkömmlichen Speicher extern ist, um das Lesen und das Schreiben beim Verschieben der Daten durchzuführen. Da die Ressource, die die Verschiebung durchführt, zu dem herkömmlichen Speicher extern ist, muss jedes der Datenwörter, das an der Wort-für-Wort-Verschiebung beteiligt ist, zwischen der externen Ressource und dem herkömmlichen Speicher durch eine Form von Datenbus oder einem ähnlichen Kommunikationskanal laufen. Der Datenbus oder der ähnliche Kommunikationskanal kann eine Geschwindigkeit der Lese- und Schreibeoperationen und infolgedessen eine Gesamtgeschwindigkeit der Verschiebung wesentlich begrenzen. Somit kann das Verschieben großer Datenteilsätze in Bezug auf die Verarbeitungszeit aufgrund eines oder beider der Wirkungen der Datenbusgeschwindigkeit und der proportionalen Zeitaspekte des Durchführens einer Verschiebung unter Verwendung eines herkömmlichen Speichers unerschwinglich teuer werden.
  • Gemäß den hierin beschriebenen Grundsätzen hat ein verschiebbarer Speicher eine eingebaute Verschiebungsfähigkeit, so dass beispielsweise Daten nicht von einer externen Ressource gelesen und dann geschrieben werden müssen, um eine Verschiebung durchzuführen. Der zusammenhängende Teilsatz gespeicherter Daten wird zu dem verschiebbaren Speicher identifiziert (z. B. unter Verwendung einer Adresse und einer Länge) und der verschiebbare Speicher wird angewiesen, den zusammenhängenden Teilsatz zu verschieben. Die Verschiebung wird dann von dem verschiebbaren Speicher vorgenommen und findet komplett in diesem statt. Geschwindigkeitsbegrenzungen, die mit dem Übertragen von Daten an und von einer externen Ressource assoziiert werden, werden gemäß den Beispielen der hierin beschriebenen Grundsätze durch den verschiebbaren Speicher im Wesentlichen eliminiert. Darüber hinaus kann die Zeit zum Verschieben beispielsweise im Wesentlichen von der Länge des zusammenhängenden Teilsatzes unabhängig sein.
  • Gemäß verschiedenen Beispielen kann das Verschieben in dem verschiebbaren Speicher mit Schaltkreisen des verschiebbaren Speichers selbst implementiert werden. Dadurch erfordert das Verschieben unter Verwendung eines verschiebbaren Speichers kein aufeinander folgendes Lesen und Schreiben jedes Datenworts des zusammenhängenden Teilsatzes. Das Verschieben unter Verwendung eines verschiebbaren Speichers kann beispielsweise alle Daten in dem zusammenhängenden Teilsatz auf eine im Wesentlichen gleichzeitige Weise verschieben. Dadurch kann der verschiebbare Speicher das Verschieben des zusammenhängenden Teilsatzes innerhalb einer Zeit implementieren, die im Wesentlichen von der Länge des zusammenhängenden Teilsatzes unabhängig ist.
  • In einigen Beispielen kann der verschiebbare Speicher die Verschiebung gemäß den beschriebenen Grundsätzen in einer im Wesentlichen konstanten Zeit durchführen. Mit „konstante Zeit” ist gemeint, dass eine im Wesentlichen ähnliche Zeitdauer erforderlich ist, um den zusammenhängenden Teilsatz gespeicherter Daten zu verschieben, ungeachtet der Länge des zusammenhängenden Teilsatzes. Ein zusammenhängender Teilsatz willkürlicher Länge kann beispielsweise gemäß einigen Beispielen innerhalb eines einzigen Taktzyklus verschoben werden. In einem anderen Beispiel kann ein kürzerer zusammenhängender Teilsatz nur einen einzigen Taktzyklus benötigen, während ein längerer zusammenhängender Teilsatz zwei oder mehr Taktzyklen erfordern kann. Obwohl der verschiebbare Speicher mehr Zeit für längere Teilsätze als für verhältnismäßig kürzere Teilsätze anwenden kann, wird die Verschiebung dennoch immer noch innerhalb einer im Wesentlichen konstanten Zeit durchgeführt, da die erforderliche Zeit nicht strikt proportional zu der Länge des zusammenhängenden Teilsatzes ist.
  • Hierin bezieht sich der Begriff „Speicher” auf eine beliebige Art von Speicher, der Daten empfangen und speichern kann. Der Speicher stimmt im Allgemeinen mit einem Speicher überein, der beispielsweise von einem Computerprozessor oder in einem Computersystem eingesetzt wird. Insbesondere bezieht sich Speicher definitionsgemäß hierin auf eine beliebige Art von Speicher, der während einer Operation des Computers, der den Speicher einsetzt, beschrieben und gelesen werden kann. Der Speicher kann beispielsweise einen Direktzugriffsspeicher (random access memory, RAM) umfassen. Der Direktzugriffsspeicher kann beispielsweise ein statischer RAM (SRAM) sein. Andere Arten von Speicher beinhalten, sind jedoch nicht darauf beschränkt, einen dynamischen Direktzugriffsspeicher (dynamic random access memory, DRAM), einen Flash- und ähnliche nichtflüchtige Speicher, die während einer Operation des Computers beschreibbar sind, verschiedene Formen eines optischen Speichers (z. B. wiederbeschreibbare optische Platten), ein magnetischer Speicher (z. B. Computerfestplatten) und verschiedene Speicherstrukturen, die auf Signalspeichern, bistabilen Kippschaltungen (Flipflops) und anderen bistabilen Konstrukten basieren.
  • Ein Speicher kann außerdem hierin definitionsgemäß eine Vielzahl von Gruppen von Speicherzellen umfassen. Eine Vielzahl von Speicherzellen kann auch gemäß einigen Beispielen als ein Feld angeordnet sein. Die Speicherzellen können beispielsweise als ein lineares Feld angeordnet sein. In einem anderen Beispiel sind die Speicherzellen in einem zweidimensionalen Feld (2D-Feld) angeordnet. Felder höherer Ordnung (z. B. drei oder mehr Dimensionen) können auch eingesetzt werden. In einigen Beispielen ist ein Feld niederer Ordnung (z. B. ein lineares Feld) auf einem Feld mit einer größeren Dimension (z. B. 2D-Feld) definiert. Ein lineares Feld kann beispielsweise durch eine Adressieranordnung auf einem rechteckigen 2D-Feld von Speicherzellen definiert sein. Darüber hinaus können Felder in Teilfelder aufgeteilt werden. Ein 2D-Feld kann beispielsweise in Quadranten als vier Teilfelder aufgeteilt werden. Gemäß verschiedenen Beispielen kann das Feld entweder ein physisches Feld oder ein logisches Feld sein. Ein physisches Feld umfasst Speicherzellen, die gemäß dem Feld oder wie von dem Feld definiert zueinander physisch organisiert oder lokalisiert sind. Ein logisches Feld umfasst eine logische Anordnung der Speicherzellen als ein Feld. In einem logischen Feld kann eine physische Anordnung der Speicherzellen beispielsweise sich von der logischen Anordnung, die von dem Feld definiert wird, unterscheiden. Logische Felder können unter Verwendung von beispielsweise Adressenindirektion definiert werden.
  • Eine Speicherzelle ist eine Schaltung oder ein verwandtes Konstrukt, das Daten fasst oder speichert, wie hierin definiert und eingesetzt. Des Weiteren können Speicherzellen definitionsgemäß hierin ein oder mehrerer „Bits” Daten speichern. Das Bit kann beispielsweise ein Binärwert (z. B. „0” oder „1”) sein und die Speicherzelle kann ein einziges Bit fassen. In einem anderen Beispiel kann die Speicherzelle eine Vielzahl von Binärwert-Bits fassen. Insbesondere kann die Speicherzelle ein komplettes Datenwort, das die Vielzahl von Bits umfasst, fassen oder speichern, wie hierin definiert. Eine Speicherzelle kann beispielsweise 4, 8, 16, 32 oder 64 binäre Bits fassen. In noch einem anderen Beispiel kann die Speicherzelle Daten in einer anderen Form (z. B. einem hexadezimalen Wert, einem Analogwert usw.) fassen. Insbesondere sind Speicherzellen wie hierin definiert nicht darauf beschränkt, Daten in einem binären Format zu speichern, sondern können in einigen Beispielen ein willkürliches Datenkonstrukt fassen oder speichern. Zu Erörterungszwecken hierin werden binäre Daten jedoch im Allgemeinen überall beispielhaft und nicht beschränkend eingesetzt, sofern nicht anderweitig festgelegt.
  • Wie hierin verwendet ist ein „Register” oder gleichbedeutend „Speicherregister” als eine Sammlung oder Gruppierung von Speicherzellen definiert. Des Weiteren kann ein Register, das eine Gruppierung von Speicherzellen umfasst, hierin Daten (z. B. eine Vielzahl von Datenbits) fassen, die das Datenwort eines bestimmten Computersystems darstellen. Somit wird der Inhalt eines Registers hierin im Allgemeinen als ein „Datenwort” bezeichnet. In einigen Beispielen sind die Speicherzellen eines Speicherregisters physisch zueinander benachbart. Eine erste Speicherzelle eines Speicherregisters kann sich beispielsweise unmittelbar neben einer zweiten Speicherzelle des Speicherregisters befinden. In anderen Beispielen sind die Speicherzellen eines Speicherregisters logisch miteinander in Verbindung anstelle von oder zusätzlich zur physischen gemeinsamen Anordnung. Insbesondere sind benachbarte Speicherzellen möglicherweise in einigen Beispielen nicht unbedingt physisch benachbart, um logisch benachbart zu sein.
  • Speicherzellen werden auch oftmals hierin als „Speicherorte” bezeichnet. Genau genommen handelt es sich bei einem Speicherort um eine bzw. mehrere Speicherzellen an einem bestimmten Ort innerhalb des Speichers, wobei der Ort durch eine Adresse bezeichnet oder identifiziert wird. Auf die Speicherzelle wird beispielsweise unter Verwendung der Adresse zugegriffen. Der Einfachheit der Erörterung hierin halber werden Speicherzellen jedoch im Allgemeinen als eine Adresse aufweisend oder sich an einer Adresse befindend bezeichnet. Adressen oder Orte können beispielsweise mit einer verschiebbaren Einheit (z. B. einem Datenwort) des Speichers assoziiert sein. Somit können „Ort” und Adresse hierin austauschbar eingesetzt werden. Darüber hinaus kann „Ort” gemäß einigen Beispielen dazu verwendet werden, auf einen Ort eines zusammenhängenden Datensatzes zu verweisen, der durch eine Startadresse und eine Endadresse bezeichnet wird. In anderen Beispielen kann der Ort des zusammenhängenden Satzes durch eine Startadresse (oder eine Endadresse) und eine Länge des zusammenhängenden Satzes bezeichnet werden.
  • Wie durch benachbarte Speicherorte definierte benachbarte Speicherzellen können definitionsgemäß hierin physisch benachbart (d. h. sich nebeneinander befinden) oder logisch benachbart sein. Logische Adjazenz kann gemäß einigen Beispielen durch eine darüber liegende logische Speicherstruktur (z. B. unter Verwendung von Indirektion) festgestellt werden. Logisch benachbarte Speicherzellen können beispielsweise physisch voneinander getrennt sein, aber immer noch in Bezug auf eine darüber liegende Speicherstruktur, die Verschachtelung einsetzt, als benachbart betrachtet werden. Ebenso kann der zusammenhängende Teilsatz physisch zusammenhängend (d. h. sich in physisch benachbarten Speicherzellen befinden) oder logisch zusammenhängend sein. Insbesondere eignet der zusammenhängende Datenteilsatz – wie in den benachbarten Speicherzellen des verschiebbaren Speichers gespeichert – sich definitionsgemäß hierin eine Nachbarschaft an, die zu der Adjazenz der Speicherzellen analog ist und von dieser bestimmt wird.
  • Des Weiteren hierin und wie oben angemerkt ist eine Verschiebung, wie sie von einem verschiebbaren Speicher durchgeführt wird, als eine Umsetzung eines zusammenhängenden Datenteilsatzes definiert, der in dem Speicher gespeichert ist, sofern nicht anderweitig festgelegt. Insbesondere stellt eine Verschiebung unter Verwendung eines verschiebbaren Speichers definitionsgemäß hierin die Umsetzung (z. B. in einem Feld nach oben oder nach unten) der gespeicherten Daten (z. B. Datenwörter) innerhalb des zusammenhängenden Teilsatzes von einem ersten Ort an einen zweiten Ort innerhalb des Speichers dar. Darüber hinaus setzt die Verschiebung bei Anwendung auf den zusammenhängenden Teilsatz gespeicherter Daten alle gespeicherten Daten innerhalb des zusammenhängenden Teilsatzes um. Darüber hinaus führt die Verschiebung durch einen verschiebbaren Speicher definitionsgemäß hierin nicht zu einer Umsetzung oder Verschiebung von Daten außerhalb des Datenteilsatzes, der an der Verschiebung beteiligt ist. Im Allgemeinen kann die Verschiebung die Daten um eine Entfernung von einem oder mehreren Speicherorten oder Speicheradressen bewegen. Die Verschiebung kann beispielsweise die Daten um einen einzigen Speicherort innerhalb des Speichers nach oben oder nach unten bewegen.
  • Hierin ist die Richtung „nach oben” in Bezug auf Speicherorte in dem verschiebbaren Speicher als eine Richtung zu Orten mit kleineren Adressen definiert. Die Richtung „nach unten” ist als eine Richtung zu Orten mit größeren Adressen definiert. Folglich ist eine „Verschiebung nach oben” (Upshift) als die Daten zu einem zweiten Ort mit einer kleineren Adresse als eine Adresse eines ersten oder Ausgangsorts bewegend oder verschiebend definiert. Umgekehrt ist eine „Verschiebung nach unten” (Downshift) als die Daten von einem ersten Ort mit einer kleineren Adresse zu einem zweiten Ort mit einer größeren Adresse bewegend oder verschiebend definiert. Obwohl die Verschiebungsrichtung gemäß einigen Beispielen steuerbar oder auswählbar ist, kann die Verschiebungsrichtung (z. B. nach oben oder nach unten) jedoch vollständig willkürlich sein, wie hierin eingesetzt. Des Weiteren ist die spezifische Verwendung von „Upshift” und „Downshift” hierin zu Erörterungszwecken und nicht einschränkend.
  • 1A stellt ein Beispiel einer Downshift eines zusammenhängenden Datenteilsatzes, der in einem linearen Feld in einem verschiebbaren Speicher gespeichert ist, gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. Insbesondere stellt 1A eine Vielzahl von Speicherzellen dar, von denen jede ein Datenwort speichern kann. Die Datenwörter können beispielsweise acht binäre Bits umfassen, wobei jedes Bit (z. B. entweder eine „1” oder „0”) in einer separaten von acht Speicherzellen gespeichert ist. Des Weiteren wird – wie dargestellt – jede der dargestellten Speicherzellen durch eine Adresse identifiziert, die von 00 bis 11 reicht. Eine linke Seite von 1A stellt die Vielzahl von Speicherzellen vor der Downshift dar, während eine rechte Seite dieselbe Vielzahl von Speicherzellen nach der Downshift darstellt.
  • Wie dargestellt umfasst die beispielhafte Downshift innerhalb des verschiebbaren Speichers das Auswählen eines zusammenhängenden Teilsatzes gespeicherter Datenwörter, der beispielsweise mit einer Speicherzelle an Adresse 04 startet und mit einer Speicherzelle an Adresse 08 endet. Der ausgewählte zusammenhängende Teilsatz enthält Datenwörter {11001010, 01001010, 11111011, 0000001, 11011011) in dem dargestellten Beispiel. Der verschiebbare Speicher verschiebt den ausgewählten zusammenhängenden Teilsatz von Datenwörtern dann nach unten (Downshift), indem die gespeicherten Datenwörter einen Adressenort nach unten bewegt werden, wie in der rechten Seite von 1A dargestellt. Die Downshift bewahrt eine Reihenfolge der Datenwörter in dem zusammenhängenden Teilsatz und legt den zusammenhängenden Teilsatz in Speicherzellen zwischen der Adresse 05 und der Adresse 09 ab. Das Verschieben der gespeicherten Daten nach unten überschreibt den Inhalt einer Speicherzelle unmittelbar unter dem zusammenhängenden Teilsatz (d. h. an Adresse 09) und ersetzt den Inhalt dieser Speicherzelle durch ein letztes Datenwort (d. h. „11011011”) des nach unten verschobenen zusammenhängenden Teilsatzes. Des Weiteren wird die Speicherzelle an Adresse 04, die ursprünglich den ersten Datenwert des zusammenhängenden Teilsatzes aufwies, unbestimmt gemacht, wie durch das „X” angezeigt. Gemäß verschiedenen Beispielen kann die Speicherzelle an Adresse 04 eine Kopie des Datenworts (z. B. „11001010”) aufbewahren, das vor der Downshift vorlag, oder kann nach der Downshift gelöscht (z. B. auf „00000000” gesetzt) werden.
  • In einigen Beispielen kann die Speicherzelle an Adresse 04 beispielsweise zum Einfügen eines Datenworts von einer externen Quelle verfügbar sein. Ein Datenwort kann gemäß einigen Beispielen in die Speicherzelle an Adresse 04 eingefügt werden, indem nacheinander einzelne Bits des eingefügten Datenworts in die Speicherzellen der Speicherzelle an Adresse 04 präsentiert und getaktet oder verschoben werden (z. B. ein serielles Schreiben).
  • 1B stellt ein Beispiel einer Upshift eines zusammenhängenden Datenteilsatzes, der in einem linearen Feld in einem verschiebbaren Speicher gespeichert ist, gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. Insbesondere stellt 1B eine Vielzahl von Speicherzellen dar, von denen jede ein Datenwort (z. B. „abc”, „def” usw.) speichert. Des Weiteren wird – wie dargestellt – jede der dargestellten Speicherzellen durch eine Adresse identifiziert, die von 00 bis 11 reicht. Eine linke Seite von 1B stellt die Vielzahl von Speicherzellen vor der Upshift dar, während eine rechte Seite dieselbe Vielzahl von Speicherzellen nach der Upshift darstellt.
  • Wie in 1B dargestellt umfasst die Upshift in einem verschiebbaren Speicher das Auswählen eines zusammenhängenden Teilsatzes gespeicherter Datenwörter, der beispielsweise mit einer Speicherzelle an Adresse 03 startet und mit einer Speicherzelle an Adresse 06 endet. Der verschiebbare Speicher verschiebt dann den ausgewählten zusammenhängenden Teilsatz nach oben (Upshift), indem die gespeicherten Datenwörter in dem ausgewählten zusammenhängenden Teilsatz um einen Adressenort nach oben bewegt werden, wie in der rechten Seite von 1B dargestellt. Die Upshift bewahrt eine Reihenfolge der Wörter in dem zusammenhängenden Teilsatz und legt den zusammenhängenden Teilsatz in Speicherzellen zwischen der Adresse 02 und der Adresse 05 ab. Das Verschieben der gespeicherten Datenwörter nach oben überschreibt den Inhalt einer Speicherzelle unmittelbar über dem zusammenhängenden Teilsatz (d. h. an Adresse 02), wodurch der Inhalt dieser Speicherzelle durch ein erstes Datenwort (d. h., „jkl”) des nach oben verschobenen zusammenhängenden Teilsatzes ersetzt wird. Des Weiteren wird die Speicherzelle an Adresse 06, die ursprünglich das letzte Wort des zusammenhängenden Teilsatzes aufwies, unbestimmt gemacht, wie durch das „X” angezeigt. Gemäß einigen Beispielen kann die Speicherzelle an Adresse 06 eine Kopie des Datenworts (z. B. „stu”) aufbewahren, das vor der Upshift vorlag, oder kann nach der Upshift gelöscht (z. B. auf „000” gesetzt) werden. In einigen Beispielen kann die Speicherzelle an Adresse 06 beispielsweise zum Einfügen von Daten von einer externen Quelle verfügbar sein.
  • Gemäß verschiedenen Beispielen kann der verschiebbare Speicher ein Teil eines Hauptspeichers eines Universalcomputersystems sein. Der verschiebbare Speicher kann beispielsweise einen Teilsatz des Speichers darstellen, der den Hauptspeicher ausmacht. Darüber hinaus unterscheidet sich der verschiebbare Speicher gemäß verschiedenen Beispielen von Speicherzellen, einem Cachespeicher oder anderen verhältnismäßig kleinen Speicherstrukturen, die oftmals beispielsweise zusammen mit anderen Komponenten (z. B. einer Arithmetik-Logik-Einheit, einem Controller usw.) in einen Mikroprozessor integriert vorgefunden werden. Insbesondere ist ein verschiebbarer Speicher definitionsgemäß hierin Teil des Hauptspeichers und somit gemäß verschiedenen Beispielen von einem Prozessor eines Universalcomputersystems oder eines verwandten Verarbeitungssystems getrennt. Darüber hinaus enthält ein verschiebbarer Speicher gemäß einigen Beispielen in der Regel eine Größenordnung oder mehr Speicherplatz als in dem Prozessor vorliegt oder vorliegen kann. Ein verschiebbarer Speicher kann beispielsweise viele Megabytes oder sogar Gigabytes Speicherplatz aufweisen, wohingegen ein Prozessorspeicherplatz in der Regel auf weniger als einige wenige zehn Bytes (z. B. Prozessorregister) bis einige Megabytes (z. B. L1-Cachespeicher, L2-Cachespeicher usw.) begrenzt ist. Gemäß einigen Beispielen kann der verschiebbare Speicher ein spezialisierter Teil des Hauptspeichers oder ein Untersystem davon sein.
  • Hierin ist eine „Datenstruktur” als eine Struktur in einem Speicher definiert, die Daten, die in dem Speicher gespeichert sind, enthält und eine Organisierung dieser bereitstellt. Beispiele von Datenstrukturen beinhalten, sind jedoch nicht darauf beschränkt, Felder und Listen, Strings, Baumstrukturen (z. B. B-Bäume, B+-Bäume usw.), Haufen, Hash-Tabellen, Stapel, Datengrafiken, Warteschlangen und Hybride davon. Datenstrukturen wie hierin definiert können beispielsweise verschiedene Hybriddatenstrukturen beinhalten, wie eine Hash-Tabelle mit Speicherbereichen, die ausgeglichene Bäume sind, einen Baum mit Knoten, die Hash-Tabellen sind, usw., sind jedoch nicht darauf beschränkt. In einigen Beispielen können die Datenstrukturen weiterhin als Strukturen definiert sein, die Daten enthalten, die gemäß einer spezifischen Regel oder eines spezifischen Konstrukts sortiert oder anderweitig organisiert sind. Ein B+-Baum kann beispielsweise Datensätze enthalten, die in einer aufsteigenden Weise oder einer absteigenden Weise gemäß entweder einem Wert des Datensatzes selbst oder einem Schlüssel, der den Satz identifiziert, sortiert sind. Ein B+-Baum kann dazu verwendet werden, beispielsweise Namen und assoziierte Telefonnummern (d. h. Datensätze) zu enthalten, die auf der Basis der Namen alphabetisch sortiert sind.
  • Hierin bezieht sich eine „Datenstruktur-Operation” auf und ist definiert als eine Operation oder eine Aktion, die an einer Datenstruktur oder genauer an Daten, die von oder in einer Datenstruktur umfasst werden bzw. enthalten sind, durchgeführt wird. Ein „Datenstruktur-Operator” ist definitionsgemäß ein Operator, der eine Datenstruktur-Operation durchführt oder implementiert. Eine Datenstruktur-Operation kann beispielsweise eine Suche nach einem spezifischen Datensatz in einer Vielzahl von Datensätzen, die von einer Datenstruktur umfasst werden, umfassen. Ebenso ist beispielsweise ein Such-Operator, der eine Operation an der Datenstruktur durchführt, ein Datenstruktur-Operator. In einem anderen Beispiel ist ein Verschiebungsoperator (Shift-Operator), der bewirkt, dass Daten innerhalb der Datenstruktur verschoben (z. B. nach oben verschoben oder nach unten verschoben) werden, ein Datenstruktur-Operator, während die Verschiebung selbst als eine Datenstruktur-Operation erachtet wird. Man beachte, dass eine Unterscheidung zwischen einem Operator, der eine Aktion bewirkt oder initiiert, und einem Mittel zum Durchführen der Aktion gemacht wird. Ein Verschiebungsoperator kann beispielsweise eine Verschiebung von Daten in einer Datenstruktur initiieren, während ein verschiebbarer Speicher, auf dem die Datenstruktur definiert ist, für das tatsächliche Durchführen der Verschiebung, die von dem Verschiebungsoperator initiiert wurde, verantwortlich sein kann.
  • Des Weiteren soll der Artikel „ein/eine/einer” wie hierin verwendet seine übliche Bedeutung in der Patenttechnik haben, nämlich „ein/eine/einer oder mehrere”. Eine „Speicherzelle” bedeutet beispielsweise eine oder mehrere Speicherzellen und somit bedeutet „die Speicherzelle” hierin „die Speicherzelle(n)”. Außerdem soll jede Bezugnahme hierin auf oben” unten” obere” untere” nach oben” nach unten”, „vorne”, „hinten”, „links” oder „rechts” hierin keine Einschränkung sein. Hierin bedeutet der Begriff „etwa”, wenn er auf einen Wert angewendet wird, im Allgemeinen innerhalb des Toleranzbereichs der Ausrüstung, die zum Produzieren des Werts verwendet wird, oder bedeutet in einigen Beispielen plus oder minus 10% oder plus oder minus 5% oder plus oder minus 1%, sofern nicht ausdrücklich anderweitig angegeben. Darüber hinaus sollen Beispiele hierin nur veranschaulichend sein und werden zu Erörterungszwecken und nicht einschränkend dargelegt.
  • 2 stellt ein Blockdiagramm eines verschiebbaren Speichers 100, der In-Memory-Datenstrukturen (im Speicher befindliche Datenstrukturen) unterstützt, gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. Der verschiebbare Speicher 100 stellt ein Bewegen oder Verschieben eines zusammenhängenden Datenteilsatzes in dem verschiebbaren Speicher 100 bereit. Das Verschieben von Daten durch den verschiebbaren Speicher 100 verschiebt nur die Daten in dem zusammenhängenden Teilsatz und keine anderen Daten außerhalb des zusammenhängenden Teilsatzes. Wenn der verschiebbare Speicher 100 eine Verschiebung des zusammenhängenden Teilsatzes durchführt, werden insbesondere gemäß verschiedenen Beispielen nur Daten des zusammenhängenden Teilsatzes beeinflusst. Die Verschiebung verschiebt keine anderen Daten, die sich beispielsweise außerhalb des zusammenhängenden Teilsatzes befinden. Des Weiteren bewegt die Verschiebung gemäß einigen Beispielen den zusammenhängenden Datenteilsatz, ohne eine Reihenfolge der Daten in dem zusammenhängenden Datensatz wesentlich zu ändern oder anderweitig zu beeinflussen. Darüber hinaus unterstützt der verschiebbare Speicher 100 eine oder mehrere In-Memory-Datenstrukturen, die auf dem verschiebbaren Speicher 100 definiert sind. Die Datenstruktur kann gemäß verschiedenen Beispielen die Datenverarbeitung und -bearbeitung unter Einsatz der Verschiebung, die von dem verschiebbaren Speicher 100 bereitgestellt wird, erleichtern.
  • Mit „definiert auf” ist definitionsgemäß hierin gemeint, dass die Datenstruktur einen Speicher einsetzt, der den verschiebbaren Speicher 100 umfasst, um Daten der Datenstruktur zu speichern. Des Weiteren bedeutet „In-Memory” definitionsgemäß hierin, dass die Datenstruktur sich in einem Speicher befindet (d. h. Daten in einem Speicher speichert) und dass der Speicher den verschiebbaren Speicher 100 umfasst. Die In-Memory-Datenstruktur kann beispielsweise gemäß einigen Beispielen Daten in sowohl dem verschiebbaren Speicher 100 als auch einem herkömmlichen oder „nicht verschiebbaren” Speicher speichern.
  • In einigen Beispielen übermittelt eine externe Ressource (z. B. ein Prozessor) Daten mittels eines Datenbusses (Daten-E/A) 102 an den und von dem verschiebbaren Speicher 100. Daten, die in dem verschiebbaren Speicher 100 gespeichert werden sollen, können beispielsweise von der externen Ressource mittels des Datenbusses 102 an den verschiebbaren Speicher 100 übermittelt werden. Auf ähnliche Weise können beispielsweise Daten, die in dem verschiebbaren Speicher 100 gespeichert sind und anschließend aus diesem gelesen werden, von dem verschiebbaren Speicher 100 mittels des Datenbusses 102 an die externe Ressource übermittelt werden. Informationen, die zum Steuern einer Operation des verschiebbaren Speichers 100 verwendet werden, wie eine Adresse und eine Länge des zusammenhängenden Teilsatzes, jedoch nicht darauf beschränkt, können gemäß einigen Beispielen unter Verwendung eines Adressbusses (ADDR) 104 und eines Längenbusses (LEN) 106 an den verschiebbaren Speicher 100 übermittelt werden. Ein einziger Adressbus, der sowohl die Adresse als auch die Länge oder alternativ dazu ein Adressenpaar trägt, kann in anderen Beispielen (nicht dargestellt) eingesetzt werden.
  • Wie dargestellt umfasst der verschiebbare Speicher 100, der In-Memory-Datenstrukturen unterstützt, einen Speicher 110 zum Speichern von Daten. Der Speicher 110 weist eine eingebaute Verschiebungsfähigkeit auf, um einen zusammenhängenden Teilsatz der Daten von einem ersten Ort an einen zweiten Ort in dem Speicher zu verschieben. Insbesondere ist die eingebaute Verschiebungsfähigkeit dazu konfiguriert, den zusammenhängenden Datenteilsatz im Wesentlichen innerhalb des Speichers 110 zu verschieben. Während der Verschiebung werden die Daten gemäß verschiedenen Beispielen nicht aus dem Speicher 110 heraus übertragen, um die Verschiebung zu erzielen. Der zweite Ort kann beispielsweise eine Verschiebung einer einzigen Dateneinheit (z. B. eines Datenworts) in Bezug auf den ersten Ort darstellen. Die Verschiebung kann beispielsweise durch Bewegen von Daten entlang Pfaden innerhalb des Speichers 110 von dem ersten Ort zu einem benachbarten Ort des Speichers 110, der den zweiten Ort darstellt, erzielt werden.
  • Das Bewegen von Daten zu dem benachbarten Ort wird hierin als eine „Übertragung an einen benachbarten Ort” bezeichnet. In einem anderen Beispiel kann die Verschiebung den zusammenhängenden Datenteilsatz um mehr als eine Dateneinheit (z. B. zwei oder mehr Datenwörter) bewegen. Eine Verschiebung von zwei oder mehr Dateneinheiten kann beispielsweise durch eine direkte Verschiebung unter Verwendung interner Datenpfade des Speichers 110 von dem ersten Ort an den zweiten Ort erzielt werden, der zwei oder mehr Dateneinheiten von dem ersten Ort entfernt ist. In anderen Beispielen kann der Speicher 110 mit eingebauter Verschiebungsfähigkeit die Daten in einer Reihe kleinerer Schritte (z. B. eine Vielzahl Übertragungen an einen benachbarten Ort) bewegen, um die Verschiebung um mehr als eine Dateneinheit zu erzielen. In jedem Beispiel erzielt eine eingebaute Verschiebungsfähigkeit des Speichers 110 jedoch gemäß verschiedenen Beispielen der hierin beschriebenen Grundsätze die Verschiebung im Wesentlichen, ohne sich auf eine Übertragung der Daten in den Speicher 110 und aus diesem heraus zu stützen oder eine solche einzusetzen.
  • Gemäß einigen Beispielen umfasst der Speicher 110 eine Vielzahl von Speicherzellen 112, die als ein Verbund zum Speichern von Daten konfiguriert sind. In einigen Beispielen können die gespeicherten Daten einem Datenwort entsprechen. In einigen Beispielen sind die Speicherzellen 112 dazu konfiguriert, binäre Daten zu speichern. In einigen Beispielen ist jede Speicherzelle 112 dazu konfiguriert, ein einziges Bit von binären Daten (z. B. als eine „1” oder „0”) zu speichern. In anderen Beispielen ist jede Speicherzelle 112 dazu konfiguriert, eine Vielzahl von binären Datenbits zu speichern. Jede Speicherzelle 112 kann beispielsweise ein Datenwort speichern. Insbesondere umfasst jede Speicherzelle 112 gemäß einigen Beispielen eine Vielzahl von Speicherorten, die als ein Verbund zum Speichern von Datenbits, die dem Datenwort entsprechen, konfiguriert sind. Die Vielzahl von Datenbits des Datenworts definiert eine Breite der Speicherzelle 112. In anderen Beispielen kann die Speicherzelle 112 die Daten in einer Form speichern, bei der es sich nicht um ein oder mehrere binäre Bits handelt.
  • Gemäß verschiedenen Beispielen kann der Speicher 110 unter Verwendung von im Wesentlichen einer beliebigen Speichertechnologie implementiert werden. Speicherzellen des Speichers 110 können beispielsweise unter Verwendung von Speicherzellen 110 eines statischen Direktzugriffsspeichers (static random access memory, SRAM) implementiert werden. In einem anderen Beispiel können ein oder mehrere bistabile Kippschaltungen (Flipflops), wie ein D-Flipflop, jedoch nicht darauf beschränkt, eingesetzt werden, um die Speicherzellen 112 des Speichers 110 zu implementieren. In anderen Beispielen kann noch eine andere Speichertechnologie (z. B. DRAM, Memristoren usw.) dazu verwendet werden, die Speicherzellen 112 des Speichers 110 zu implementieren.
  • Gemäß einigen Beispielen umfasst der Speicher 110 weiterhin einen Controller 114. Der Controller 120 ist dazu konfiguriert, einen zusammenhängenden Teilsatz der gespeicherten Daten auszuwählen. Der Controller 124 ist weiterhin dazu konfiguriert, die Verschiebung des ausgewählten zusammenhängenden Teilsatzes von einem ersten Ort an einen zweiten Ort in dem Speicher 110 zu steuern. Der ausgewählte zusammenhängende Teilsatz weist gemäß verschiedenen Beispielen der hierin beschriebenen Grundsätze eine Länge auf, die geringer als eine Gesamtlänge des Speichers 110 ist. Unter Verwendung eines oder mehrerer Steuersignale kann der Controller 120 beispielsweise bewirken, dass der Speicher 110 den ausgewählten zusammenhängenden Teilsatz verschiebt, indem er den Speicher 110 anweist, die Verschiebung durchzuführen.
  • In verschiedenen Beispielen erleichtert der Speicher 110 oder allgemeiner der verschiebbare Speicher 100 eine Upshift (Verschiebung nach oben) und/oder eine Downshift (Verschiebung nach unten) des zusammenhängenden Teilsatzes von Daten (z. B. Datenwörtern). Insbesondere kann eine Speicherzelle 112 des zweiten Orts in dem Speicher 110 sich entweder über oder unter einer entsprechenden Speicherzelle 112 des ersten Orts je nach einer Richtung der Verschiebung befinden. In einigen Beispielen ist die Speicherzelle 112 des zweiten Orts eine einzige Speicherzelle (oder ein einziger Speicherort), entfernt von der entsprechenden Speicherzelle 112 des ersten Orts. Anders ausgedrückt, die Verschiebung stellt eine Bewegung des zusammenhängenden Teilsatzes gespeicherter Daten durch einen einzigen Speicherort oder eine einzige Adresse dar. In anderen Beispielen stellt der zweite Ort eine Bewegung von mehr als einer einzigen Speicherzelle 112 dar. Die Daten in der Form von Datenwörtern können beispielsweise als ein lineares Feld von Bits in dem verschiebbaren Speicher gespeichert werden und die Verschiebung kann eine Anzahl von Bits sein, die einer Länge des Datenworts in Bits entspricht.
  • In einigen Beispielen wird der ausgewählte zusammenhängende Teilsatz von sowohl einer Adresse einer ersten Speicherzelle 112 des zusammenhängenden Teilsatzes als auch einer Adresse einer letzten Speicherzelle 112 in dem zusammenhängenden Teilsatz spezifiziert. Die Adresse der ersten Speicherzelle und die Adresse der letzten Speicherzelle werden dem Controller 114 übermittelt (z. B. mittels eines Adressbusses), um das Auswählen des zusammenhängenden Teilsatzes zu erleichtern. Die Adresse der ersten Speicherzelle und die Adresse der letzten Speicherzelle können gemäß verschiedenen Beispielen entweder nacheinander als eine erste Adresse, gefolgt von einer zweiten Adresse über einen einzigen Bus (z. B. ADDR 104) übermittelt werden. Alternativ dazu können die erste und die letzte Adresse beispielsweise parallel als zwei zeitgleiche Adressen entweder über zwei Busse oder über zwei Teile eines einzigen, breiten Busses übermittelt werden.
  • In einem anderen Beispiel wird der ausgewählte zusammenhängende Teilsatz von einer Adresse der ersten Speicherzelle 112 und einer Länge des zusammenhängenden Teilsatzes (z. B. ADDR 104 und LEN 106, wie dargestellt) spezifiziert. In einigen dieser Beispiele kann die Länge die Länge des zusammenhängenden Teilsatzes sein, die der ersten Speicherzelle 112 folgt, so dass die Adresse der letzten Speicherzelle durch eine Summe der Adresse der ersten Speicherzelle und der Länge angegeben wird. In anderen Beispielen beinhaltet die Länge die erste Speicherzelle 112, so dass die Adresse der letzten Speicherzelle durch die Adresse der ersten Speicherzelle plus der Länge minus eins angegeben wird. Andere Beispiele können beispielsweise die Adresse der letzten Speicherzelle und die Länge des zusammenhängenden Teilsatzes, die der letzten Speicherzelle vorangeht, sowie andere Schemata spezifizieren.
  • In einigen Beispielen umfasst der Controller 144 einen erweiterten Decodierer. Der erweiterte Decodierer setzt Informationen in Bezug auf die Adresse und die Länge (oder alternativ dazu die Adressen der ersten und der letzten Speicherzelle) ein, um den ausgewählten Teilsatz gespeicherter Daten auszuwählen. In einigen Beispielen verwendet der erweiterte Decodierer die Informationen (z. B. Adresse und Länge des zusammenhängenden Teilsatzes) dazu, eine Ausgabe durchzusetzen (zu aktivieren), die jeder der Speicherzellen des ausgewählten Teilsatzes in dem Speicher 110 entspricht. Das Durchsetzen einer Ausgabe kann beispielsweise das Ausgeben einer logischen „1” auf einem Verbindungspfad oder -draht (z. B. einer Wortleitung W) zwischen dem erweiterten Decodierer und der Vielzahl von Speicherzellen 112 umfassen. Somit kann der erweiterte Decodierer eine logische „1” auf einer Vielzahl von Wortleitungen des Speichers 110 ausgeben, wobei die Wortleitungen den Speicherzellen 112 entsprechen, die die gespeicherten Daten des ausgewählten zusammenhängenden Teilsatzes enthalten. Die Wortleitungen können beispielsweise mit einer Ladefreigabe-Eingabe (LE-Eingabe) oder einer Auswahl-Eingabe (SEL-Eingabe) der Speicherzellen verbunden sein. In anderen Beispielen umfasst das Durchsetzen einer Ausgabe das Ausgeben einer logischen „0”. Das Durchsetzen einer logischen „0” kann beispielsweise verwendet werden, wenn die Speicherzellen 112 eine „Nicht”-Ladefreigabe-Eingabe (LE-Eingabe) oder eine „Nicht”-Auswahl-Eingabe (SEL-Eingabe) aufweisen.
  • In einigen Beispielen ist der erweiterte Decodierer weiterhin dazu konfiguriert, eine zusätzliche Ausgabe durchzusetzen, die einer Speicherzelle 112, die benachbart zu und unmittelbar über dem ausgewählten zusammenhängenden Teilsatz ist, oder einer Speicherzelle 112, die benachbart zu und unmittelbar unter dem ausgewählten zusammenhängenden Teilsatz ist, entspricht. Die zusätzliche Ausgabe, die der Speicherzelle 112, die unmittelbar über dem ausgewählten zusammenhängenden Teilsatz ist, entspricht, kann durchgesetzt werden, wenn die gespeicherten Daten innerhalb des Speichers 110 nach oben verschoben werden sollen. Die zusätzliche Ausgabe, die der Speicherzelle 112, die unmittelbar unter dem ausgewählten zusammenhängenden Teilsatz ist, entspricht, kann beispielsweise durchgesetzt werden, wenn die gespeicherten Daten innerhalb des Speichers 110 nach unten verschoben werden sollen. Insbesondere kann die zusätzliche Ausgabe dazu verwendet werden, die Speicherzelle 112, die gespeicherte Daten von entweder der ersten Speicherzelle 112 oder der letzten Speicherzelle 112 des zusammenhängenden Datenteilsatzes empfangt, zu aktivieren.
  • 3 stellt eine Wahrheitstabelle eines erweiterten Decodierers gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. Insbesondere ist der erweiterte Decodierer, der der dargestellten Wahrheitstabelle entspricht, dazu konfiguriert, den zusammenhängenden Teilsatz in einem beispielhaften Speicher 110 mit acht Speicherzellen auszuwählen. Die Wahrheitstabelle weist drei Adressen-Eingaben (ADDR), eine Längen-Eingabe (LEN-Eingabe) und acht Wortleitungen W (d. h. W0–W7) auf. Die acht Wortleitungen W können beispielsweise Ladefreigabe-Eingaben (LE-Eingaben) von acht Speicherzellen in dem beispielhaften Speicher 110 entsprechen. Wie in der Wahrheitstabelle zu sehen ist, funktioniert der erweiterte Decodierer für einen Wert von LEN, der gleich „00” ist, im Wesentlichen ähnlich einem herkömmlichen Decodierer (d. h. nur eine Wortleitung W erfolgt jeweils). Eine Vielzahl von Wortleitungen W werden jedoch für alle anderen Werte von LEN durchgesetzt, um eine zeitgleiche Aktivierung einer entsprechenden Vielzahl von Speicherzellen 112 zu erleichtern, die den ausgewählten zusammenhängenden Teilsatz gespeicherter Daten, die verschoben werden sollen, fassen oder speichern.
  • In einigen Beispielen kann der erweiterte Decodierer unter Verwendung eines Festwertspeichers (read only memory, ROM) implementiert werden. Der ROM wird mit einer Wahrheitstabelle programmiert, die die Funktionalität des erweiterten Decodierers spezifiziert. Ein Decodierer des ROM decodiert beispielsweise eine Eingabe (z. B. ADDR und LEN) und die programmierten Verbindungen in dem ROM erweitern die Ausgabe des ROM-Decodierers, um die Funktionalität des erweiterten Decodierers zu ergeben. In einem anderen Beispiel kann ein herkömmlicher Decodierer mit einer Ausgabeschaltung erweitert werden, bei denen es sich nicht um die programmierten Verbindungen handelt, um den erweiterten Decodierer zu implementieren. In noch einem anderen Beispiel kann der erweiterte Decodierer unter Verwendung einer zwischengespeicherten Welligkeitskaskade implementiert werden.
  • Der verschiebbare Speicher 100, der In-Memory-Datenstrukturen unterstützt, umfasst weiterhin eine Datenstruktur 120. Insbesondere ist die Datenstruktur 120 auf dem Speicher 100 definiert und ist dazu konfiguriert, Daten zu enthalten. Die Daten, die von der Datenstruktur 120 umfasst werden, umfassen gemäß verschiedenen Beispielen den zusammenhängenden Teilsatz. In einigen Beispielen umfasst die Datenstruktur weiterhin Daten, die nicht Teil des zusammenhängenden Teilsatzes sind, sich jedoch immer noch in dem Speicher 110 befinden.
  • In einigen Beispielen umfasst die Datenstruktur 120 weiterhin Daten, die außerhalb des Speichers 110 gespeichert sind. Die Datenstruktur 120 kann beispielsweise sowohl einen herkömmlichen Speicher als auch den Speicher 110 des verschiebbaren Speichers 100 umfassen oder umspannen. In einigen Beispielen kann die Datenstruktur 120 sich im Wesentlichen in einem herkömmlichen, nicht verschiebbaren Speicher befinden, wobei Teile der Daten, die in der Datenstruktur gespeichert sind, in den verschiebbaren Speicher 100 bewegt (z. B. vorübergehend bewegt) werden. Die Daten können beispielsweise zum Zwecke des Verschiebens des zusammenhängenden Teilsatzes bewegt werden. Nach dem Verschieben können Daten, die einen Teil oder den gesamten verschobenen zusammenhängenden Datenteilsatz umfassen, beispielsweise von dem verschiebbaren Speicher 100 zurück in einen herkömmlichen Speicher bewegt werden.
  • Gemäß einigen Beispielen ist die eingebaute Verschiebungsfähigkeit des Speichers 110 dazu konfiguriert, das Bewahren einer im Wesentlichen sortierten Reihenfolge der Daten zu erleichtern. In einigen Beispielen ist die eingebaute Verschiebungsfähigkeit des Speichers 110 weiterhin dazu konfiguriert, das Sortieren der Daten in einer im Wesentlichen sortierten Reihenfolge zu erleichtern. Insbesondere ist die eingebaute Verschiebungsfähigkeit in einigen Beispielen dazu konfiguriert, das Einfügen der Daten und/oder das Löschen der Daten bereitzustellen. Das Einfügen und das Löschen, die bereitgestellt werden, können beispielsweise dazu eingesetzt werden, die Daten zu sortieren und/oder dann eine Reihenfolge (d. h. die sortierte Reihenfolge) der Daten, sobald diese sortiert sind, im Wesentlichen zu bewahren. Selbstverständlich können das Sortieren und das Bewahren der sortierten Reihenfolge gemäß verschiedenen Beispielen im Allgemeinen andere Operationen (z. B. Suchen, Vergleichen usw.) neben dem Einfügen und dem Löschen, die von dem Speicher 110 bereitgestellt werden, einsetzen.
  • In einigen Beispielen enthält die Datenstruktur 120 Daten, die Datensätze umfassen. Datensätze können als die „tatsächlichen” Daten betrachtet werden, die in der Datenstruktur gespeichert sind und von dieser organisiert werden, wie hierin eingesetzt. Die „tatsächlichen” Daten, die von einem Datensatz in Bezug zu einer Einzelperson dargestellt werden, können beispielsweise einen oder mehrere eines Namens der Person, einer Telefonnummer, eines Geburtsdatums, einer Adresse usw. umfassen. In anderen Beispielen umfassen die Daten Zeiger auf Datensätze. Die Zeiger sind Daten, die auf einen Ort anderer Daten (z. B. ein anderer Zeiger, ein bestimmter Datensatz usw.) „zeigen” oder einen solchen bereitstellen. In einigen Beispielen umfassen die Daten eine Kombination von Zeigern und Datensätzen.
  • In einigen Beispielen umfassen die Daten der Datenstruktur 120 oder umfassen weiterhin einen Geisterdatensatz. Ein Geisterdatensatz ist ein pseudogelöschter Datensatz, der einen physischen Raum oder physische Räume in der Datenstruktur 120 belegt, jedoch keinen tatsächlichen oder bestehenden Datensatz darstellt. Somit wirkt sich ein Geisterdatensatz im Allgemeinen nicht auf den Dateninhalt der Datenstruktur 120 aus. Gemäß einigen Beispielen können Geisterdatensätze einen „leichten” Mechanismus zum logischen Löschen eines oder mehrerer Datensätze mit minimaler Auswirkung auf eine physische Struktur oder physische Strukturen eines Datenbanksystems bereitstellen. Geisterdatensätze können beispielsweise einer Transaktion dabei zu helfen sicherzustellen, dass weder Raumzuteilung noch Schlüsselbeschränkungen versagen werden, wenn Datensatzlöschoperationen zurückgesetzt werden. Gemäß einigen Beispielen besteht eine Grundtechnik zum Erstellen eines Geisterdatensatzes darin, einen gelöschten Datensatz als ungültig zu markieren (z. B. durch Umdrehen eines einzigen Statusbits in einem Datensatzkopf), während der physische Datensatz und dessen zugehöriger Schlüssel bewahrt werden (z. B. in einem B-Baum). Der Datensatz und sein Schlüssel können beispielsweise gesperrt bleiben, bis die Löschtransaktion verübt wird. Somit kann der Geisterdatensatz in einigen Beispielen in einen Datensatz umgewandelt werden und umgekehrt, indem ein Bit des Geisterdatensatzes bzw. des Datensatzes geändert wird. Geisterdatensätze können gemäß einigen Beispielen das Suchen innerhalb einer Datenstruktur 120 erleichtern. Geisterdatensätze können beispielsweise in einer Datenstruktur 120 dazu verwendet werden, eine Leistung einer Interpolationssuche zu verbessern, indem beispielsweise eine im Wesentlichen gleichmäßige Verteilung von Datensätzen in der Datenstruktur 120 erleichtert wird.
  • Die Daten der Datenstruktur 120 können auch oder alternativ dazu weiterhin Datensatzlücken oder einfach „Lücken” umfassen. Wie hierin verwendet ist eine „Datensatzlücke” eine absichtlich eingeführte Lücke zwischen verwandten Datensätzen der Datenstruktur 120. Die Datensatzlücke kann beispielsweise am Ende eines ersten Datensatzes eingeführt werden, um einen Puffer zwischen dem ersten Satz und einem folgenden zweiten Satz bereitzustellen. Der Puffer kann beispielsweise einen Raum in dem ersten Datensatz zum Einfügen neuer Daten bereitstellen, ohne dass eine Datenübertragung zwischen dem ersten Satz und dem zweiten Satz erforderlich ist. Datensatzlücken können gemäß einigen Beispielen dazu eingesetzt werden, das Sortieren (z. B. mittels einer Bibliothekssortierung) zu erleichtern.
  • In einigen Beispielen umfasst die Datenstruktur 120 eine Baumdatenstruktur oder einfach einen „Datenbaum”. Der Datenbaum kann beispielsweise ein so genannter B-Baum sein. Insbesondere kann die Datenstruktur 120 gemäß einigen Beispielen einen B+-Baum umfassen. In einigen Beispielen umfasst die Datenstruktur 120 eine Hash-Tabelle oder eine Hash-Karte. Andere Beispielen der Datenstruktur 120 beinhalten, sind jedoch nicht darauf beschränkt, eine Warteschlange, einen Stapel, einen Haufen, einen Container (z. B. einen sortierten Container), eine verknüpfte Liste, eine Karte und einen Graph.
  • 4A stellt ein schematisches Diagramm eines Teils eines beispielhaften B+-Baums 400 gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. 4B stellt den beispielhaften B+-Baum 400 von 4A gemäß einem anderen Beispiel der hierin beschriebenen Grundsätze dar. Ein B+-Baum, der auch als ein „B-plus-Baum” bezeichnet wird, ist eine Datenstruktur, die eine Vielzahl von Knoten 410 umfasst, die sortierte Daten gemeinsam organisieren. Einzigartige Schlüssel identifizieren im Allgemeinen die sortierten Daten in einem B+-Baum. Endknoten 410' werden manchmal als Astknoten oder einfach „Äste” bezeichnet, während andere Knoten 310 als Innen- oder Zweigknoten 410 bezeichnet werden können. In einem B+-Baum werden im Gegensatz zu einem B-Baum alle Datensätze in dem Endknoten oder in der Astebene gespeichert. Nur Schlüssel werden gemäß einigen Beispielen von Innenknoten 410 gespeichert.
  • Das Einfügen eines neuen Datensatzes 412 in den beispielhaften B+-Baum 400 umfasst das Lokalisieren eines entsprechenden Astes 410' sowie einer Einfügestelle, wie durch einen leeren Pfeil in 4A dargestellt. Eine Suchoperation kann beispielsweise zum Lokalisieren des entsprechenden Astes 410' und der Einfügestelle verwendet werden. Ein Teil der Daten des identifizierten Astes 410' unter der Einfügestelle wird dann verschoben, um Platz für den neuen Datensatz 410 in dem Ast 410' zu schaffen. Das Verschieben wird in 4A beispielsweise durch horizontale Pfeile dargestellt. Darüber hinaus ist der eingefügte neue Datensatz 412 in 4B als in den Ast 410' eingefügt dargestellt. Gemäß verschiedenen Beispielen kann die eingebaute Verschiebungsfähigkeit des Speichers 110 dazu eingesetzt werden, die Datensätze unter die Einfügestelle zu verschieben (z. B. nach unten verschieben), um Platz für das Einfügen des neuen Datensatzes 412 zu schaffen. Der zusammenhängende Teilsatz kann gemäß verschiedenen Beispielen die Datensätze des Datenteils unter der Einfügestelle in dem Ast 410' umfassen.
  • Das Löschen eines existierenden Datensatzes erfordert auf ähnliche Weise das Lokalisieren eines entsprechenden Astes 410'' sowie das Lokalisieren eines bestimmten Datensatzes 412'' zum Löschen, wie in den 4A und 4B dargestellt. Sobald sie lokalisiert wurden, können gemäß einigen Beispielen die Datensätze des Astes 410'', die nicht gelöscht werden (z. B. restliche Datensätze), verschoben werden, um den Datensatz 412'' zu überschreiben, der zur Löschung gekennzeichnet ist. Das Verschieben ist wie oben in 4B durch horizontale Pfeile angezeigt. Gemäß verschiedenen Beispielen kann die eingebaute Verschiebungsfähigkeit des Speichers 110 dazu eingesetzt werden, die Verschiebung (z. B. eine Upshift) der restlichen Datensätze bereitzustellen, um den zur Löschung gekennzeichneten Datensatz 412'' aus dem Ast 410” zu entfernen. Der zusammenhängende Teilsatz kann beispielsweise die restlichen Datensätze umfassen, die verschoben werden, um sich auf die Löschung des zur Löschung gekennzeichneten Datensatzes 412'' auszuwirken.
  • In einigen Beispielen kann das Verschieben zu der Erzeugung eines neuen Astes 410' und/oder eines neuen Knotens führen oder auch nicht, je nachdem, ob ein bestimmter Ast 410' „voll” ist oder nicht. In einigen Beispielen kann die Löschung eines Astes 410' die Löschung eines Astes 410' und/oder eines Knotens 410 erfordern oder zu dieser führen. Geisterdatensätze 420 und/oder eine Datensatzlücke 430 am Ende des Astes 410' können beispielsweise dazu verwendet werden, eine Wahrscheinlichkeit zu verringern, dass der Ast voll ist. Geisterdatensätze 420 und Datensatzlücken sind in den 4A und 4B beispielhaft dargestellt.
  • Wieder unter Bezugnahme auf die 2 umfasst der verschiebbare Speicher 100, der In-Memory-Datenstrukturen unterstützt, in einigen Beispielen weiterhin einen Datenstruktur-Operator 130. Der Datenstruktur-Operator 130 ist dazu konfiguriert, eine Operation an der Datenstruktur 120 in dem Speicher 110 durchzuführen. Insbesondere führt der Datenstruktur-Operator 130 eine Datenstruktur-Operation an den Daten der Datenstruktur 120 durch. Des Weiteren ist die eingebaute Verschiebungsfähigkeit dazu konfiguriert, das Einfügen der Daten und/oder das Löschen der Daten in Verbindung mit dem Datenstruktur-Operator 130 bereitzustellen.
  • Der Datenstruktur-Operator 130 kann beispielsweise einen Bibliothekssortierungsoperator umfassen. Der Bibliothekssortierungsoperator ist dazu konfiguriert, eine Bibliothekssortierung der Daten der Datenstruktur 130 durchzuführen. In einem anderen Beispiel kann der Datenstruktur-Operator 130 einen Drehungsoperator umfassen. Der Drehungsoperator ist gemäß einigen Beispielen dazu konfiguriert, einen ausgewählten Teil (z. B. den zusammenhängenden Teilsatz) der Daten in der Datenstruktur 130 zu drehen. Die Drehung kann eine Datenverschiebung entweder nach links (z. B. eine Linksdrehung) oder nach rechts (z. B. eine Rechtsdrehung) mit Daten umfassen, die beispielsweise aus oder von einem Ende des ausgewählten Teils verschoben werden, um in ein entgegengesetztes Ende wieder eingefügt zu werden, um die Datendrehung hervorzurufen. Die Datenverschiebung kann beispielsweise von der eingebauten Verschiebungsfähigkeit des Speichers 110 bereitgestellt werden. Andere Beispiele des Datenstruktur-Operators 130 beinhalten, sind jedoch nicht darauf beschränkt, einen Interpolationssuchoperator, einen binären Suchoperator und einen sequentiellen Suchoperator.
  • In einigen Beispielen ist der Datenstruktur-Operator 130 als Software oder Firmware (z. B. Computercode oder Anweisungen) implementiert, die in einem computerlesbaren Medium gespeichert ist und von einem Prozessor ausgeführt wird. Das computerlesbare Medium kann eine oder mehrere verschiedene Formen eines Computerspeichers (z. B. RAM, ROM, Flash-Speicher usw.), eine Magnetplatte und eine optische Platte eines Computersystems beinhalten, ist jedoch nicht darauf beschränkt.
  • In einem anderen Beispiel ist der Datenstruktur-Operator 130 in Hardware implementiert. Der Datenstruktur-Operator 130 kann beispielsweise als eine Maschinencodeanweisung eines Prozessors (z. B. eines Mikroprozessors) implementiert werden, der den verschiebbaren Speicher 100 einsetzt. In einem anderen Beispiel kann der Datenstruktur-Operator 130 in Schaltkreisen des verschiebbaren Speichers 100 selbst implementiert und/oder mit diesen gemeinsam angeordnet sein. Der Datenstruktur-Operator 130 kann beispielsweise als logische Schaltungen implementiert sein, die Teil des Controllers 114 sind. In einem anderen Beispiel ist der Datenstruktur-Operator als eine anwendungsspezifische integrierte Schaltung (application-specific integrated circuit, ASIC) implementiert, die beispielsweise Seite an Seit mit dem Controller 114 arbeitet. In noch anderen Beispielen kann der Datenstruktur-Operator 130 als Teil eines Speichercontrollers (nicht dargestellt) implementiert sein, der eine Schnittstelle zu dem verschiebbaren Speicher 100 als Teil eines Speicheruntersystems unterstützt und bereitstellt. Obwohl der Datenstruktur-Operator 130 entfernt von anderen Teilen des verschiebbaren Speichers 100 implementiert werden kann, wird der Datenstruktur-Operator 130 dennoch als ein Element des verschiebbaren Speichers 100 betrachtet, da er gemäß einigen Beispielen auf dem Speicher 110 definiert ist und dazu konfiguriert ist, an einem zusammenhängenden Datenteilsatz innerhalb des Speichers 110 zu arbeiten.
  • In einigen Beispielen kann die eingebaute Verschiebungsfähigkeit des Speichers 110, die von dem verschiebbaren Speicher 100 bereitgestellt wird, Datenstrukturen 120 mit größeren Unterstrukturen (Knoten, Äste usw.) erleichtern, als mit einem herkömmlichen (nicht verschiebbaren) Speicher praktisch sein könnte. Die Verwendung der eingebauten Verschiebung des Speichers 110 kann beispielsweise die Umsetzung eines B+-Baums mit größeren Ästen 410' ermöglichen, als sie ohne den Speicher 110 praktisch sind. Die größeren Äste 410' können beispielsweise aufgrund von Effizienzen praktisch sein, die dem Einfügen und dem Löschen von Daten assoziiert werden, die von der im Wesentlichen konstanten Zeitdatenverschiebung bereitgestellt werden, die von der eingebauten Verschiebungsfähigkeit geliefert wird. Gemäß einigen Beispielen können größere Äste 410' eine gleichzeitige Verringerung einer Tiefe des B+-Baums und eine Erhöhung einer Datenmenge, die gespeichert werden kann, bereitstellen. In einigen Beispielen können effiziente Einfügungen und Löschungen, die von der eingebauten Verschiebungsfähigkeit bereitgestellt werden, dazu ausreichen, Datenstrukturen 120 mit den größeren Unterstrukturen zu erleichtern. In anderen Beispielen kann das effiziente Einfügen und Löschen von Daten in der Datenstruktur 120 gesteigert werden, indem ausgewählte Datenstruktur-Operatoren 130 verwendet werden.
  • Die Datenstruktur 120 kann beispielsweise unter Verwendung eines bis zu vielleicht einer verhältnismäßig kleinen Anzahl beträchtlich großer Felder (z. B. Äste, Knoten usw.) konstruiert werden, um die Daten zu fassen. Datensatzlücken können während der Konstruktion vorher entlang der Felder eingefügt werden. Die Datensatzlücken können beispielsweise vorher zufällig, regelmäßig und/oder strategisch auf der Basis eines Charakteristikums der Daten eingefügt werden (z. B. auf der Basis bekannter oder erwarteter Frequenzcharakteristika der einzufügenden Daten). Gemäß verschiedenen Beispielen können die Datensatzlücken eine Größe aufweisen, die zufällig gemäß einer vorherbestimmten Formel (z. B. periodische Lückengrößenverdoppelung) und/oder strategisch auf der Basis der gespeicherten Daten bestimmt wird. In einigen Beispielen können auch Geisterdatensätze vorher eingefügt werden. Geisterdatensätze können beispielsweise eingebunden werden, um eine Leistung eines Datenstruktur-Operators 130, wie eines Interpolationssuchoperators, ist jedoch nicht darauf beschränkt, zu erleichtern oder zu verbessern.
  • Der Speicher 110 mit eingebauter Verschiebungsfähigkeit kann dazu verwendet werden, ein effizientes Einfügen von Daten bereitzustellen und/oder ein effizientes Löschen von Daten in den beträchtlich großen Feldern bereitzustellen. Das Vorliegen von Datensatzlücken und/oder Geisterdatensätzen kann gemäß einigen Beispielen die Verschiebung durch den Speicher 110 steigern, indem eine durchschnittliche Größe des zusammenhängenden Teilsatzes verringert wird, der verschoben werden muss, um einer bestimmten Einfügung oder Löschung Rechnung zu tragen. Um beispielsweise einen Datensatz an einer bestimmten Einfügestelle in ein Feld einzufügen, müssen nur jene existierenden Datensätze in dem Feld bis zu einer nächsten Datensatzlücke unter der Einfügestellte in den zusammenhängenden Teilsatz eingebunden werden, der von dem Speicher 110 verschoben wird. Die Datensätze in dem zusammenhängenden Teilsatz, die in die nächste Datensatzlücke verschoben werden, können beispielsweise wirksam von der Datensatzlücke absorbiert werden (was z. B. zu einer Größenverringerung der Datensatzlücke führt. Die Verwendung derartiger Datensatzlücken während des Einfügens und des Löschens wird von einem Datenstruktur-Operator 130 verkörpert, wie einem Bibliothekssortierungsoperator, ist jedoch nicht darauf beschränkt.
  • Das Lokalisieren und Identifizieren von Datensätzen in den beträchtlich großen Feldern, die gelöscht oder als Einfügestellen dienen sollen, kann unter Verwendung eines Datenstruktur-Operators 130 erzielt werden, der eine Suche durchführt. Datenstruktur-Operatoren 130, die die beträchtlich großen Felder effizient durchsuchen können, um einen bestimmten Datensatz zu lokalisieren und zu identifizieren, beinhalten, sind jedoch nicht darauf beschränkt, einen Interpolationssuchoperator, einen binären Suchoperator und einen sequentiellen Suchoperator. Die eingebaute Verschiebungsfähigkeit des Speichers 1100 kann auch dazu eingesetzt werden, das Einfügen und das Anpassen von Datensatzlücken und Geisterdatensätzen zu erleichtern, um eine Leistung der Suchdatenstruktur-Operatoren 130 zu steigern. Die eingebaute Verschiebung kann beispielsweise dazu verwendet werden, Datensatzlücken und Geisterdatensätze neu zu verteilen und wieder einzuführen, um Suchleistungsniveaus aufrechtzuerhalten.
  • 5A stellt ein Blockdiagramm eines verschiebbaren Speichersystems 500 mit In-Memory-Datenstruktur-Unterstützung mit einer Datenstruktur in einem verschiebbaren Speicher gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. 5B stellt ein Blockdiagramm eines verschiebbaren Speichersystems 500 mit In-Memory-Datenstruktur-Unterstützung mit einem verschiebbaren Speicher in einer Datenstruktur gemäß einem anderen Beispiel der hierin beschriebenen Grundsätze dar.
  • Insbesondere umfasst das verschiebbare Speichersystem 500, das in den 5A und 5B dargestellt ist, einen verschiebbaren Speicher 510. Gemäß einigen Beispielen umfasst der verschiebbare Speicher 510 eine Vielzahl von Speicherzellen 512 mit eingebauter Verschiebungsfähigkeit. Die eingebaute Datenverschiebung ist dazu konfiguriert, einen zusammenhängenden Datenteilsatz, der in den Speicherzellen 512 gespeichert ist, von einem ersten Ort an einen zweiten Ort in dem verschiebbaren Speicher 510 zu verschieben. Der zusammenhängende Datenteilsatz weist eine Größe (z. B. eine Länge) auf, die kleiner als eine Gesamtgröße des verschiebbaren Speichers 510 ist. In einigen Beispielen ist der verschiebbare Speicher 510 dem oben in Bezug auf den verschiebbaren Speicher 100 beschriebenen Speicher 110 im Wesentlichen ähnlich.
  • Des Weiteren, wie in den 5A und 5B dargestellt, umfasst das verschiebbare Speichersystem 500 eine In-Memory-Datenstruktur 530. Gemäß einigen Beispielen kann die In-Memory-Datenstruktur 530 sich vollständig in dem verschiebbaren Speicher 510 befinden, wie in 5A dargestellt. In anderen Beispielen befindet sich nur ein Teil der In-Memory-Datenstruktur 530 in dem verschiebbaren Speicher 510, wie in 5B dargestellt. Ein Teil der Daten in der In-Memory-Datenstruktur 530 kann sich beispielsweise in dem verschiebbaren Speicher 510 befinden, während ein restlicher Teil der Daten sich in einem anderen Speicher (nicht dargestellt) befinden kann. Der andere Speicher kann beispielsweise ein herkömmlicher oder im Wesentlichen nicht verschiebbarer Speicher sein. Wenn nur ein Teil der In-Memory-Datenstruktur 530 in dem verschiebbaren Speicher 510 ist, kann das verschiebbare Speichersystem 500 beispielsweise als den verschiebbaren Speicher 510 in der Datenstruktur 530 aufweisend betrachtet werden.
  • In einigen Beispielen kann sich der Teil der Daten, der sich in dem verschiebbaren Speicher 510 befindet von Zeit zu Zeit ändern. Daten können beispielsweise von dem anderen Speicher (z. B. nicht verschiebbaren Speicher) in den verschiebbaren Speicher 510 und dann zurück in den anderen Speicher bewegt werden. Die Daten können beispielsweise für eine Verschiebungsoperation, eine Einfügeoperation, eine Löschoperation und/oder eine beliebige einer Vielfalt anderer Operationen, die eine Datenverschiebung einsetzen, in den verschiebbaren Speicher 510 bewegt werden. Eine derartige Anordnung des verschiebbaren Speichers 510 und des anderen Speichers kann als eine Hierarchie von Speichermedien bezeichnet werden. Neben dem verschiebbaren Speicher 510 kann die Hierarchie von Speichermedien gemäß verschiedenen Beispielen einen anderen Speicher beinhalten, der einen Cachespeicher (z. B. L1-Cachespeicher, L2-Cachespeicher usw.), einen RAM, eine Platte (z. B. magnetisch, optisch usw.) und/oder einen Flash-Speicher umfasst.
  • Die In-Memory-Datenstruktur 530 kann beispielsweise ein B-Baum sein, in dem im Wesentlichen alle B-Baum-Ebenen mit Ausnahme der Astknoten oder Seiten in einen Pufferpool in einem RAM-Speicher (z. B. dem anderen Speicher) passen können. Für die Astseiten könnte ein Pufferpool beispielsweise LRU-Ersatzrichtlinie (LRU = least recently used, am längsten unbenutzt) einsetzen. Darüber hinaus können Astseiten, während Daten häufig in den Astseiten aktualisiert werden können, regelmäßig in den verschiebbaren Speicher 510 bewegt werden, während sie bearbeitet werden. Folglich ist bei Suchen mit Zufallssuchschlüsseln beispielsweise nur eine einzige E/A-Operation erforderlich, ähnlich einem Hash-Index, falls ein solcher verfügbar ist. Es versteht sich, dass gemäß verschiedenen Beispielen andere Kriterien in der Auswahl verwendet werden können, welche Teile der Datenstrukturen in den verschiebbaren Speicher 510 und aus diesem heraus bewegt werden sollen.
  • Das verschiebbare Speichersystem 500, das in den 5A und 5B dargestellt ist, umfasst weiterhin einen Datenstruktur-Operator 520. Der Datenstruktur-Operator 520 ist auf dem verschiebbaren Speicher 510 definiert und ist dazu konfiguriert, an der In-Memory-Datenstruktur 530 zu arbeiten. Die In-Memory-Datenstruktur 530 ist in einigen Beispielen dazu konfiguriert, Daten zu enthalten, die den zusammenhängenden Teilsatz umfassen. Gemäß einigen Beispielen ist die eingebaute Verschiebungsfähigkeit des verschiebbaren Speichers 510 dazu konfiguriert, das Sortieren zu erleichtern, und/oder dazu konfiguriert, eine im Wesentlichen sortierte Reihenfolge der Daten in der Datenstruktur in Verbindung mit dem Datenstruktur-Operator 520 zu bewahren. In einigen Beispielen ist der Datenstruktur-Operator 520 im Wesentlichen dem Datenstruktur-Operator 130 ähnlich, der oben in Bezug auf den verschiebbaren Speicher 100 beschrieben ist.
  • Insbesondere umfasst der Datenstruktur-Operator 520 in einigen Beispielen einen Suchoperator. Der Datenstruktur-Operator 520 kann beispielsweise einen Interpolationssuchoperator, einen binären Suchoperator und/oder einen sequentiellen Suchoperator umfassen. In einigen Beispielen umfasst der Datenstruktur-Operator 520 einen Sortierungsoperator. Der Datenstruktur-Operator 520 kann beispielsweise einen Bibliothekssortierungsoperator umfassen. In einem anderen Beispiel umfasst der Datenstruktur-Operator 520 einen Drehungsoperator.
  • 6 stellt ein schematisches Diagramm einer In-Memory-Datenstruktur 530 vor und nach Datendrehung gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. Wie in einem oberen Teil der 6 dargestellt, enthält die In-Memory-Datenstruktur 530 einen Acht-Zeichen-String „ABCDEFGH” vor Datendrehung durch einen Datenstruktur-Operator 520. Ein unterer Teil der 6 stellt beispielsweise den Acht-Zeichen-String nach einem Beispiel einer linksgerichteten Drehung eines Vier-Zeichen-Segments 532 in dem String dar. Der Datenstruktur-Operator 520 kann beispielsweise einen Drehungsoperator umfassen, um die Datendrehung bereitzustellen. Nach der Datendrehung ist der Acht-Zeichen-String ein gedrehter String „ABDEFCGH”, wie dargestellt.
  • Insbesondere beginnt das Vier-Zeichen-Segment 532 zunächst mit einem Zeichen „C”, während das Vier-Zeichen-Segment 532 nach Drehung mit einem Zeichen „D” beginnt, wie dargestellt. Gemäß einigen Beispielen kann die Ausführung des Drehungsoperators, um die Datendrehung hervorzurufen, das Kopieren des Zeichens „C” zu einem vorübergehenden Speicherort (nicht dargestellt), das Verschieben der Zechen „DEF” nach links und dann das Einfügen des zuvor gespeicherten Zeichens „C” zurück in den Acht-Zeichen-String umfassen. Insbesondere wird das Zeichen „C” in eine Position eingefügt, die durch die Verschiebung an einem Ende des gedrehten Strings zwischen dem Zeichen „F” und einem Zeichen „G” geöffnet wurde. Das Vier-Zeichen-Segment 532 kann gemäß verschiedenen Beispielen der zusammenhängende Teilsatz sein und die Verschiebung kann durch die Verschiebungsfähigkeit des verschiebbaren Speichersystems 500 durchgeführt werden. Wie dargestellt, stellt ein gebogener Pfeil in 6 eine Bewegung des Zeichens „C” von einem Beginn zu einem Ende des gedrehten Strings während der Datendrehung dar.
  • Wieder unter Bezugnahme auf die 5A und 5B kann die eingebaute Verschiebungsfähigkeit des verschiebbaren Speichers 510 gemäß verschiedenen Beispielen das Einfügen und/oder das Löschen von Datensätzen der Datenstruktur 530 erleichtern. In einigen Beispielen umfasst die Datenstruktur 530 ein im Wesentlichen sortiertes Feld von Datensätzen. In einigen Bespielen umfassen Daten der Datenstruktur 530 Geisterdatensätze und/oder Datensatzlücken.
  • 7 stellt ein Ablaufschema eines Verfahrens 600 zum Verwenden eines verschiebbaren Speichers mit In-Memory-Datenstrukturen gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. Wie dargestellt, umfasst das Verfahren 600 zum Verwenden eines verschiebbaren Speichers mit In-Memory-Datenstrukturen das Definieren 610 einer Datenstruktur in Speicherzellen des verschiebbaren Speichers. Der verschiebbare Speicher weist eine Vielzahl von Speicherzellen mit eingebauter Verschiebungsfähigkeit auf, um einen zusammenhängenden Datenteilsatz in der Datenstruktur von einem ersten Ort an einen zweiten Ort zu verschieben. In einigen Beispielen ist der verschiebbare Speicher im Wesentlichen dem Speicher 110 mit eingebauter Verschiebungsfähigkeit ähnlich, der oben in Bezug auf den verschiebbaren Speicher 100 beschrieben wurde. Insbesondere ist eine Größe des zusammenhängenden Datenteilsatzes des verschiebbaren Speichers gemäß verschiedenen Beispielen kleiner als eine Gesamtgröße des verschiebbaren Speichers und die eingebaute Verschiebung umfasst eine Upshift (Verschiebung nach oben) und/oder eine Downshift (Verschiebung nach unten).
  • Das Verfahren 600 zum Verwenden eines verschiebbaren Speichers mit In-Memory-Datenstrukturen umfasst weiterhin das Ausführen 620 eines Datenstruktur-Operators. Der Datenstruktur-Operator führt bei Ausführung 620 eine Operation an der Datenstruktur durch. Die Datenstruktur umfasst den zusammenhängenden Datenteilsatz. In einigen Beispielen ist der Datenstruktur-Operator dazu konfiguriert, die Daten zu sortieren, und/oder dazu konfiguriert, eine sortierte Reihenfolge der Daten der Datenstruktur unter Verwendung der eingebauten Verschiebungsfähigkeit des verschiebbaren Speichers im Wesentlichen zu bewahren. In einigen Beispielen ist die Datenstruktur im Wesentlichen der Datenstruktur 120 ähnlich, die oben in Bezug auf den verschiebbaren Speicher 100 beschrieben wurde. Des Weiteren ist der Datenstruktur-Operator in einigen Beispielen im Wesentlichen dem Datenstruktur-Operator 130 ähnlich, der oben in Bezug auf den verschiebbaren Speicher 100 beschrieben wurde.
  • In einigen Beispielen umfasst das Ausführen 620 des Datenstruktur-Operators das Durchführen einer Sortierung der Daten der Datenstruktur und/oder das Durchführen einer Suche an der Datenstruktur. In verschiedenen Beispielen wird die eingebaute Verschiebungsfähigkeit dazu verwendet, den zusammenhängenden Datenteilsatz nach unten zu verschieben, um das Einfügen von Daten in die Datenstruktur zu erleichtern, und/oder den zusammenhängenden Datenteilsatz nach oben zu verschieben, um das Löschen von Daten aus der Datenstruktur zu erleichtern. In einigen Beispielen umfasst das Verfahren 600 zum Verwenden eines verschiebbaren Speichers mit In-Memory-Datenstrukturen weiterhin das Einfügen von Geisterdatensätzen und/oder Datensatzlücken in die Daten der Datenstruktur.
  • Somit wurden Beispiele eines verschiebbaren Speichers und eines verschiebbaren Speichersystems, die jeweils In-Memory-Datenstrukturen unterstützen, und ein Verfahren zum Verwenden eines verschiebbaren Speichers mit In-Memory-Datenstrukturen beschrieben. Es versteht sich, dass die oben beschriebenen Beispiele lediglich veranschaulichend für einige der vielen spezifischen Beispiele sind, die die hierin beschriebenen Grundsätze darstellen. Offenkundig können Fachmänner problemlos zahlreiche andere Anordnungen ersinnen, ohne von dem wie durch die folgenden Ansprüche definierten Schutzumfang abzuweichen.

Claims (15)

  1. Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt und Folgendes umfasst: einen Speicher mit eingebauter Verschiebungsfähigkeit, um einen zusammenhängenden Teilsatz der Daten von einem ersten Ort an einen zweiten Ort in dem Speicher zu verschieben, wobei der zusammenhängende Datenteilsatz eine Größe aufweist, die kleiner als eine Gesamtgröße des Speichers ist, wobei die eingebaute Verschiebungsfähigkeit nur Daten des zusammenhängenden Teilsatzes verschiebt; und eine Datenstruktur, die auf dem Speicher definiert ist, um Daten zu enthalten, die den zusammenhängenden Teilsatz umfassen, wobei die eingebaute Verschiebungsfähigkeit die Bewegung der Daten, das Einfügen der Daten und/oder das Löschen der Daten in der Datenstruktur erleichtert, wobei die eingebaute Verschiebungsfähigkeit das Sortieren von Daten der Datenstruktur und/oder das Bewahren einer im Wesentlichen sortierten Reihenfolge der Daten in der Datenstruktur erleichtert.
  2. Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, nach Anspruch 1, wobei die Datenstruktur, die auf dem Speicher definiert ist, sich in sowohl dem Speicher mit eingebauter Verschiebungsfähigkeit als auch einem anderen, im Wesentlichen nicht verschiebbaren Speicher befindet.
  3. Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, nach Anspruch 1, wobei die Datenstruktur einen Datenbaum umfasst.
  4. Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, nach Anspruch 3, wobei der Datenbaum einen B+-Baum umfasst.
  5. Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, nach Anspruch 1, wobei die Datenstruktur eine Hash-Tabelle umfasst.
  6. Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, nach Anspruch 1, wobei die Daten der Datenstruktur Geisterdatensätze und/oder Datensatzlücken umfassen.
  7. Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, nach Anspruch 1, der weiterhin einen Datenstruktur-Operator umfasst, um eine Operation an der Datenstruktur in dem Speicher durchzuführen.
  8. Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, nach Anspruch 7, wobei die eingebaute Verschiebungsfähigkeit in Verbindung mit dem Datenstruktur-Operator das Sortieren von Daten der Datenstruktur und/oder das Bewahren einer im Wesentlichen sortierten Reihenfolge der Daten in der Datenstruktur bereitstellt.
  9. Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, nach Anspruch 7, wobei der Datenstruktur-Operator einen Bibliothekssortierungsoperator, Interpolationssuchoperator, einen binären Suchoperator und/oder einen sequentiellen Suchoperator umfasst.
  10. Verschiebbares Speichersystem mit In-Memory-Datenstruktur-Unterstützung, das Folgendes umfasst: einen verschiebbaren Speicher, der eine Vielzahl von Speicherzellen mit eingebauter Verschiebungsfähigkeit umfasst, um einen zusammenhängenden Datenteilsatz, der in den Speicherzellen gespeichert ist, von einem ersten Ort an einen zweiten Ort in dem verschiebbaren Speicher zu verschieben, wobei eine Größe des zusammenhängenden Teilsatzes kleiner als eine Gesamtgröße des verschiebbaren Speichers ist; und einen Datenstruktur-Operator, der auf dem verschiebbaren Speicher definiert ist, um eine Operation an einer In-Memory-Datenstruktur durchzuführen, wobei die In-Memory-Datenstruktur Daten enthält, die den zusammenhängenden Teilsatz umfassen, wobei die eingebaute Verschiebungsfähigkeit in Verbindung mit dem Datenstruktur-Operator das Bewegen von Datensätzen der Datenstruktur, das Einfügen von Datensätzen der Datenstruktur und/oder das Löschen von Datensätzen der Datenstruktur erleichtert.
  11. Verschiebbares Speichersystem nach Anspruch 10, wobei der Datenstruktur-Operator einen oder mehrere der folgenden umfasst: einen Drehungsoperator; einen Interpolationssuchoperator; einen binären Suchoperator und einen sequentiellen Suchoperator.
  12. Verschiebbares Speichersystem nach Anspruch 10, wobei der Datenstruktur-Operator einen Sortierungsoperator zum Sortieren der Daten in der Datenstruktur und/oder Bewahren einer im Wesentlichen sortierten Reihenfolge der Daten in der Datenstruktur umfasst, wobei die Datenstruktur ein im Wesentlichen sortiertes Feld von Datensätzen umfasst.
  13. Verfahren zum Verwenden eines verschiebbaren Speichers mit In-Memory-Datenstrukturen, wobei das Verfahren Folgendes umfasst: Definieren einer Datenstruktur, die Speicherzellen des verschiebbaren Speichers umfasst, wobei der verschiebbare Speicher eine Vielzahl von Speicherzellen mit eingebauter Verschiebungsfähigkeit aufweist, um einen zusammenhängenden Datenteilsatz von einem ersten Ort an einen zweiten Ort in dem verschiebbaren Speicher zu verschieben, wobei eine Größe des zusammenhängenden Datenteilsatzes kleiner als eine Gesamtgröße des verschiebbaren Speichers ist; und Ausführen eines Datenstruktur-Operators, um eine Operation an der Datenstruktur durchzuführen, wobei die Datenstruktur Daten enthält, die den zusammenhängenden Datenteilsatz umfassen, wobei die eingebaute Verschiebungsfähigkeit des verschiebbaren Speichers das Ausführend des Datenstruktur-Operators durch Bereitstellen eines oder beides von einer Downshift (Verschiebung nach unten) einer Upshift (Verschiebung nach oben) des zusammenhängenden Teilsatzes erleichtert.
  14. Verfahren zum Verwenden eines verschiebbaren Speichers mit In-Memory-Datenstrukturen nach Anspruch 13, wobei das Ausführen eines Datenstruktur-Operators weiterhin Folgendes umfasst: Durchführen einer Suche an den Daten der Datenstruktur, wobei die eingebaute Verschiebungsfähigkeit das Sortieren der Daten der Datenstruktur und/oder das Bewahren einer im Wesentlichen sortierten Reihenfolge der Daten der Datenstruktur erleichtert.
  15. Verfahren zum Verwenden eines verschiebbaren Speichers mit In-Memory-Datenstrukturen nach Anspruch 13, das weiterhin das Einfügen von Geisterdatensätzen und/oder Datensatzlücken in die Daten der Datenstruktur umfasst.
DE112011105774.1T 2011-10-27 2011-10-27 Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt Active DE112011105774B4 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2011/058185 WO2013062562A1 (en) 2011-10-27 2011-10-27 Shiftable memory supporting in-memory data structures

Publications (2)

Publication Number Publication Date
DE112011105774T5 true DE112011105774T5 (de) 2014-08-07
DE112011105774B4 DE112011105774B4 (de) 2019-02-28

Family

ID=48168231

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112011105774.1T Active DE112011105774B4 (de) 2011-10-27 2011-10-27 Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt

Country Status (5)

Country Link
US (1) US9606746B2 (de)
CN (1) CN103890856B (de)
DE (1) DE112011105774B4 (de)
GB (1) GB2509423B (de)
WO (1) WO2013062562A1 (de)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2727114B1 (de) 2011-06-28 2020-04-22 Hewlett-Packard Enterprise Development LP Umschaltbarer speicher
EP2771885B1 (de) 2011-10-27 2021-12-01 Valtrus Innovations Limited Schaltbarer speicher zur unterstützung von atomaren operationen
CN103890857B (zh) * 2011-10-27 2017-02-15 慧与发展有限责任合伙企业 采用环形寄存器的可移位的存储器
US9589623B2 (en) 2012-01-30 2017-03-07 Hewlett Packard Enterprise Development Lp Word shift static random access memory (WS-SRAM)
US9542307B2 (en) 2012-03-02 2017-01-10 Hewlett Packard Enterprise Development Lp Shiftable memory defragmentation
US9384824B2 (en) * 2012-07-10 2016-07-05 Hewlett Packard Enterprise Development Lp List sort static random access memory
US9378304B2 (en) * 2013-01-16 2016-06-28 Google Inc. Searchable, mutable data structure
CN107992294A (zh) * 2017-12-20 2018-05-04 成都优易数据有限公司 一种通用的信息表达和信息传递的超级数据结构
GB201903513D0 (en) 2019-03-14 2019-05-01 Blueshift Memory Ltd Moving data in a memory and command for memory control
US11228443B2 (en) * 2019-03-25 2022-01-18 Micron Technology, Inc. Using memory as a block in a block chain
US11901006B2 (en) 2019-05-16 2024-02-13 Xenergic Ab Shiftable memory and method of operating a shiftable memory

Family Cites Families (74)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3449887A (en) 1967-03-29 1969-06-17 American Tech Mach Co Automatic heat sealing device
US3708690A (en) 1971-02-22 1973-01-02 Mos Technology Inc Shift register
JPS5130978B1 (de) 1971-03-05 1976-09-03
US3670313A (en) 1971-03-22 1972-06-13 Ibm Dynamically ordered magnetic bubble shift register memory
US3893088A (en) 1971-07-19 1975-07-01 Texas Instruments Inc Random access memory shift register system
US3797992A (en) 1972-12-15 1974-03-19 Combustion Unltd Inc Crude oil burner
US3812336A (en) 1972-12-18 1974-05-21 Ibm Dynamic address translation scheme using orthogonal squares
US4037205A (en) 1975-05-19 1977-07-19 Sperry Rand Corporation Digital memory with data manipulation capabilities
JPS5369545A (en) 1976-12-03 1978-06-21 Hitachi Ltd Shift-register-type memory unit
US4322635A (en) 1979-11-23 1982-03-30 Texas Instruments Incorporated High speed serial shift register for MOS integrated circuit
US4504925A (en) 1982-01-18 1985-03-12 M/A-Com Linkabit, Inc. Self-shifting LIFO stack
US4521874A (en) 1982-09-28 1985-06-04 Trw Inc. Random access memory device
US4532606A (en) 1983-07-14 1985-07-30 Burroughs Corporation Content addressable memory cell with shift capability
JPH0754638B2 (ja) 1986-02-18 1995-06-07 松下電子工業株式会社 シフトレジスタ
US4864544A (en) * 1986-03-12 1989-09-05 Advanced Micro Devices, Inc. A Ram cell having means for controlling a bidirectional shift
US4813015A (en) 1986-03-12 1989-03-14 Advanced Micro Devices, Inc. Fracturable x-y storage array using a ram cell with bidirectional shift
JPS63231798A (ja) 1987-03-20 1988-09-27 Fujitsu Ltd 2次元シフトレジスタ
US4903240A (en) 1988-02-16 1990-02-20 Tektronix, Inc. Readout circuit and method for multiphase memory array
US4873665A (en) 1988-06-07 1989-10-10 Dallas Semiconductor Corporation Dual storage cell memory including data transfer circuits
CA1286803C (en) 1989-02-28 1991-07-23 Benoit Nadeau-Dostie Serial testing technique for embedded memories
US5153846A (en) 1990-07-30 1992-10-06 At&T Bell Laboratories Digital shift register using random access memory
JPH0566921A (ja) 1991-09-10 1993-03-19 Fujitsu Ltd データシフト回路
WO1993014459A1 (en) 1992-01-17 1993-07-22 Caelum Research Corporation Modular parallel processing system
US5313433A (en) 1992-09-11 1994-05-17 Micron Technology, Inc. Windowed flash write circuit
TW207013B (en) 1993-02-19 1993-06-01 Nat Science Committee Architecture of optimal high-speed sorter
JPH08507888A (ja) 1993-03-23 1996-08-20 シウ フ チャン,デイヴィッド 知能メモリアーキテクチャ
JP2970389B2 (ja) 1994-03-30 1999-11-02 日本電気株式会社 フリップ・フロップ回路
US5698997A (en) 1995-09-28 1997-12-16 Mayo Foundation For Medical Education And Research Resonant tunneling diode structures for functionally complete low power logic
EP0827156B1 (de) 1996-08-26 2003-02-26 Texas Instruments Incorporated Schieberegister mit negativen Widerstandselementen
JP3284491B2 (ja) 1997-07-08 2002-05-20 達治 増田 Srフリップ・フロップ
US5930323A (en) 1997-08-26 1999-07-27 Texas Instruments Incorporation Ultra fast shift register using resonant tunnel diodes
JP3157753B2 (ja) 1997-09-30 2001-04-16 日本電気アイシーマイコンシステム株式会社 半導体記憶回路
JP3037252B2 (ja) 1998-01-28 2000-04-24 日本電気アイシーマイコンシステム株式会社 アドレス選択回路
US6526505B1 (en) 1998-07-20 2003-02-25 Koninklijke Philips Electronics N.V. DES encryption system
US6061417A (en) 1998-12-03 2000-05-09 Xilinx, Inc. Programmable shift register
US6362660B1 (en) 1999-07-13 2002-03-26 Texas Instruments Incorporated CMOS latch and register circuitry using quantum mechanical tunneling structures
JP3744285B2 (ja) 1999-10-29 2006-02-08 日本電気株式会社 シフトレジスタ及びその制御方法
US6519204B2 (en) 2000-11-03 2003-02-11 Broadcom Corporation Very small swing high performance CMOS static memory (multi-port register file) with power reducing column multiplexing scheme
US6625057B2 (en) 2000-11-17 2003-09-23 Kabushiki Kaisha Toshiba Magnetoresistive memory device
US6515895B2 (en) 2001-01-31 2003-02-04 Motorola, Inc. Non-volatile magnetic register
US7051153B1 (en) 2001-05-06 2006-05-23 Altera Corporation Memory array operating as a shift register
JP4856848B2 (ja) 2001-10-11 2012-01-18 アルテラ コーポレイション プログラマブルロジックリソース上のエラー検出
KR100481175B1 (ko) 2002-08-08 2005-04-07 삼성전자주식회사 시프트 리던던시 회로들을 가지는 반도체 메모리 장치
GB2393277B (en) 2002-09-17 2006-01-18 Micron Europe Ltd Method for manipulating data in a group of processing elements to perform a reflection of the data
US7139946B2 (en) 2002-12-18 2006-11-21 Logicvision, Inc. Method and test circuit for testing memory internal write enable
US7355917B2 (en) 2003-03-14 2008-04-08 Nxp B.V. Two-dimensional data memory
JP2004287165A (ja) 2003-03-24 2004-10-14 Seiko Epson Corp 表示ドライバ、電気光学装置、電子機器及び表示駆動方法
JP2004296040A (ja) 2003-03-28 2004-10-21 Renesas Technology Corp 半導体記憶装置
US6834005B1 (en) 2003-06-10 2004-12-21 International Business Machines Corporation Shiftable magnetic shift register and method of using the same
JP4350459B2 (ja) 2003-08-26 2009-10-21 株式会社ルネサステクノロジ 不揮発性半導体記憶装置
US7260757B2 (en) 2003-11-25 2007-08-21 International Business Machines Corporation System and method for testing electronic devices on a microchip
US7330369B2 (en) 2004-04-06 2008-02-12 Bao Tran NANO-electronic memory array
DE102005023118B3 (de) 2005-05-19 2006-12-21 Infineon Technologies Ag Schaltungsanordnung zum Zuführen von Konfigurationsdaten in FPGA-Einrichtungen
KR101102157B1 (ko) 2005-09-16 2012-01-02 삼성전자주식회사 금속 나노 입자를 이용한 휘발성 음저항 소자
KR100719310B1 (ko) 2005-09-23 2007-05-17 한국과학기술원 셋/리셋 래치 회로, 시미트 트리거 회로 및 셋/리셋 래치회로를 이용한 모바일 기반의 d형 플립 플롭 회로와주파수 분배기 회로
JP4950490B2 (ja) 2005-12-28 2012-06-13 株式会社東芝 不揮発性スイッチング素子およびその製造方法ならびに不揮発性スイッチング素子を有する集積回路
DE102006007023B3 (de) 2006-02-15 2007-03-22 Infineon Technologies Ag Halbleiterspeicher-Vorrichtung mit einer Wortleitungsansteuerung
US7743202B2 (en) 2006-03-09 2010-06-22 Mediatek Inc. Command controller, prefetch buffer and methods for accessing a serial flash in an embedded system
JP4229140B2 (ja) 2006-06-16 2009-02-25 ソニー株式会社 集積回路チップ、データ読み出し方法、データ書き込み方法、icカード、および携帯電話機
KR100864827B1 (ko) 2006-11-02 2008-10-23 한국전자통신연구원 Mit 소자를 이용한 논리회로
US7508701B1 (en) 2006-11-29 2009-03-24 The Board Of Trustees Of The Leland Stanford Junior University Negative differential resistance devices and approaches therefor
CA2645813C (en) 2006-12-22 2010-02-02 Sidense Corp. Mask programmable anti-fuse architecture
JP5066921B2 (ja) 2007-01-17 2012-11-07 横浜ゴム株式会社 空気入りタイヤ
CN101162471B (zh) 2007-11-15 2010-12-15 华为技术有限公司 一种插入排序的方法和装置
US20090193384A1 (en) * 2008-01-25 2009-07-30 Mihai Sima Shift-enabled reconfigurable device
US8283730B2 (en) 2008-05-27 2012-10-09 Shu-Lu Chen Negative differential resistance device with high PVCR and fast switching speed and memory using the same
CN101383188B (zh) 2008-07-16 2011-02-16 南京航空航天大学 一种胚胎电子系统
TWI416529B (zh) 2008-09-26 2013-11-21 Ind Tech Res Inst 磁性移位暫存記憶體以及操作方法
US9442846B2 (en) 2009-03-17 2016-09-13 Cisco Technology, Inc. High speed memory systems and methods for designing hierarchical memory systems
CN101594319B (zh) * 2009-06-26 2011-09-14 华为技术有限公司 表项查找方法和装置
US8275728B2 (en) 2009-11-05 2012-09-25 The United States Of America As Represented By The Secretary Of The Air Force Neuromorphic computer
US8189408B2 (en) 2009-11-17 2012-05-29 Freescale Semiconductor, Inc. Memory device having shifting capability and method thereof
US8525146B2 (en) 2010-12-06 2013-09-03 Hewlett-Packard Development Company, L.P. Electrical circuit component
EP2727114B1 (de) * 2011-06-28 2020-04-22 Hewlett-Packard Enterprise Development LP Umschaltbarer speicher

Also Published As

Publication number Publication date
DE112011105774B4 (de) 2019-02-28
US20140297985A1 (en) 2014-10-02
WO2013062562A1 (en) 2013-05-02
CN103890856A (zh) 2014-06-25
CN103890856B (zh) 2017-07-11
US9606746B2 (en) 2017-03-28
GB201405179D0 (en) 2014-05-07
GB2509423B (en) 2016-03-09
GB2509423A (en) 2014-07-02

Similar Documents

Publication Publication Date Title
DE112011105774B4 (de) Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt
DE112011105670B4 (de) Verschiebbarer Speicher, der Ringregister verwendet
DE69133302T2 (de) Registerabbildung in einem einzigen Taktzyklus
DE69635663T2 (de) vERFAHREN FÜR DAS EINSPEICHERN VON DATEN IN EINEM FLASH-EEPROM-HAUPTSPEICHER IN EINEM RECHNERSYSTEM
DE112013001284B4 (de) Adaptive Cachespeicher-Umstufungen in einem Caching-System mit zwei Stufen
DE102015101414A1 (de) Verbesserter Rücksprungstapelpuffer
DE102012216022B4 (de) Verwaltung einer Zeitpunktkopie-Beziehung für platzsparende Datenträger
DE102011076894B4 (de) Persistenter Speicher für einen Hauptspeicher eines Prozessors
DE112012004571B4 (de) Unterstützen von unvollständigen Datensegmenten in Flash-Cache-Speichern
DE112017005868T5 (de) Verwaltung von e/a-abläufen für datenobjekte in einem speichersystem
CN106339324B (zh) 一种选择垃圾回收块的方法及装置
DE19961499A1 (de) Caching von Objekten in Platten-gestützten Datenbanken
DE102015100705A1 (de) Vorhersage von werten stapelgespeicherter variablen
DE102017120787A1 (de) Verfahren und Vorrichtung zum Entladen von Datenverarbeitung in Hybrid-Speichervorrichtungen
DE112018005177T5 (de) Matrix-recheneinheit
DE112009004503T5 (de) Optimierung der zugriffszeit von auf speichern gespeicherten dateien
DE112008000180T5 (de) Verfahren und System für die Umsetzung eines Fast-Wakeup eines Flashspeichersystems
DE102009031125A1 (de) Nand-Fehlerbehandlung
DE112012002452T5 (de) Anpassungsfähiges Zwischenspeichern von Datensätzen für Halbleiterplatten
DE112010004667T5 (de) Speichervorrichtung und Speichersteuerung
DE602004007925T2 (de) Verwalten einer beziehung zwischen einem zielvolumen und einem quellenvolumen
DE102013020485A1 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE102021114457A1 (de) Abwicklung von lesen in vorrichtungen mit in zonen unterteiltem namensraum
DE112020000748T5 (de) Adresserzeugung zur hochleistungsverarbeitung von vektoren
DE102018109929A1 (de) NAND-Flash-Speichervorrichtung mit NAND-Puffer

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R081 Change of applicant/patentee

Owner name: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP, HOU, US

Free format text: FORMER OWNER: HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P., HOUSTON, TEX., US

R082 Change of representative

Representative=s name: BOEHMERT & BOEHMERT ANWALTSPARTNERSCHAFT MBB -, DE

Representative=s name: SCHOPPE, ZIMMERMANN, STOECKELER, ZINKLER, SCHE, DE

R082 Change of representative

Representative=s name: BOEHMERT & BOEHMERT ANWALTSPARTNERSCHAFT MBB -, DE

R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final
R081 Change of applicant/patentee

Owner name: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP, SPR, US

Free format text: FORMER OWNER: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP, HOUSTON, TEX., US

R082 Change of representative

Representative=s name: PROCK, THOMAS, DR., GB