mozilla

Revision 515043 of IndexedDB

  • Revision slug: IndexedDB
  • Revision title: IndexedDB
  • Revision id: 515043
  • Created:
  • Creator: towfiqueanam
  • Is current revision? No
  • Comment

Revision Content

ইনডেক্সডডিবি (IndexedDB) ক্লায়েন্ট-সাইড স্টোরেজ এর জন্য একটি এপিআই যা গুরুত্বপূর্ণ পরিমান গাঠনিক ডাটা জমা রাখে এবং যা ইনডেক্স এর সাহায্যে উক্ত ডাটার উপর উচ্চ কর্মক্ষমতাসম্পন্ন  অনুসন্ধান চালাতে পারে।যেখানে ডোম স্টোরেজ  উপকারী ক্ষুদ্র পরিমান ডাটা জমা রাখার জন্য, এটি কম উপকারী বড় আকারের গাঠনিক ডাটা জমা করার জন্য, সেক্ষেত্রে ইনডেক্সডডিবি(indexedDB) একটি সমাধান প্রদান করে।

এই পেজটি এপিআই অবজেক্টসমূহের টেকনিক্যাল বিবরণগুলোর  প্রবেশপথ হিসেবে কাজ করে। যদি আপনার প্রাথমিক বই এর দরকার হয় তবে আপনার  ইনডেক্সডডিবির প্রাথমিক ধারণা  দেখা উচিত। আরও বিস্তারিতের জন্য দেখুন  ইনডেক্সডডিবির ব্যবহার

ইনডেক্সডডিবি(IndexedDB)  সিনক্রোনাস এবং এসিনক্রোনাস এক্সেস এর জন্য পৃথক এপিআই প্রদান করে। সিনক্রোনাস এপিআই কেবল ওয়েব ওয়ার্কার   এর ভিতরে ব্যবহারের জন্য কিন্তু এটি এখনও কোন ব্রাউজারে বাস্তবায়ন করা হয়নি। এসিনক্রোনাস এপিআই ওয়েবওয়ার্কার এর ভিতরে ও বাইরে উভয় জায়গাতে কাজ করে,কিন্তু ফায়ারফক্সে এখনও বাস্তবায়ন হয়নি।

Asynchronous API

The asynchronous API methods return without blocking the calling thread. To get asynchronous access to a database, call open() on the indexedDB attribute of a window object. This method returns an {{domxref("IDBRequest")}} object; asynchronous operations communicate to the calling application by firing events on {{domxref("IDBRequest")}} objects.

Note: The indexedDB object is prefixed in older browser versions (property mozIndexedDB in Gecko < 16, webkitIndexedDB in Chrome, and msIndexedDB in IE 10).

The interfaces of the asynchronous IndexedDB API are as follows:

{{domxref("IDBFactory")}}
Provides access to a database. This is the interface implemented by the global object indexedDB and is therefore the entry point for the API.
{{domxref("IDBCursor")}}
Iterates over object stores and indexes.
{{domxref("IDBCursorWithValue")}}
Iterates over object stores and indexes and returns the cursor's current value.
{{domxref("IDBDatabase")}}
Represents a connection to a database. It's the only way to get a transaction on the database.
{{domxref("IDBEnvironment")}}
Provides access to a client-side database. It is implemented by the {{ domxref("window") }} and {{ domxref("worker") }} objects.
{{domxref("IDBIndex")}}
Provides access to the metadata of an index.
{{domxref("IDBKeyRange")}}
Defines a range of keys.
{{domxref("IDBObjectStore")}}
Represents an object store.
{{domxref("IDBOpenDBRequest")}}
Represents a request to open a database.
{{domxref("IDBRequest")}}
Provides access to results of asynchronous requests to databases and database objects. It is what you get when you call an asynchronous method.
{{domxref("IDBTransaction")}}
Represents a transaction. You create a transaction on a database, specify the scope (such as which object stores you want to access), and determine the kind of access (read only or write) that you want.

An early version of the specification also defined these now removed interfaces. They are still documented in case you need to update previously written code:

{{domxref("IDBVersionChangeRequest")}}
Represents a request to change the version of a database. The way to change the version of the database has since changed (by calling {{domxref("IDBFactory.open")}} without also calling {{domxref("IDBDatabase.setVersion")}}), and the interface {{domxref("IDBOpenDBRequest")}} now has the functionality of the removed {{domxref("IDBVersionChangeRequest")}}.
{{domxref("IDBDatabaseException")}}  {{ obsolete_inline() }}
Represents exception conditions that can be encountered while performing database operations.

Note: There is also a synchronous version of the API.  The Synchronous API has not been implemented in any browser.  It is intended for use with WebWorkers.

Storage limits

There isn't any limit on a single database item's size. However there may be a limit on each IndexedDB database's size. This limit (and the way the user interface will assert it) may vary from one browser to another:

Examples

  • A powerful example of what IndexedDB can be utilized for on the web is the example by Marco Castelluccio, winner of the IndexedDB Mozilla DevDerby. The winning demo was eLibri, a library and eBook reader application.
  • You should also check out the reference application for the examples in the reference docs: To-do Notifications (view example live.) Not every snippet appears in this example, but every example uses the same data structure and syntax, and will make sense in the context of this application.

Browser compatibility

{{ CompatibilityTable() }}

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Asynchronous API

11.0 {{ property_prefix("webkit") }}
24

{{ CompatGeckoDesktop("2.0") }} {{ property_prefix("moz") }}
{{ CompatGeckoDesktop("16.0") }}
10 17 {{ CompatNo() }}
Synchronous API
(used with WebWorkers)
{{ CompatNo() }} {{ CompatNo() }}
See {{ bug(701634) }}
{{ CompatNo() }} {{ CompatNo() }} {{ CompatNo() }}
Feature Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
Asynchronous API 4.4 {{ CompatGeckoDesktop("6.0") }} {{ property_prefix("moz") }}
{{ CompatGeckoDesktop("16.0") }}
10 17 {{ CompatNo() }}

Note: Some browsers don't yet support IndexedDB but do support WebSQL, most notably Safari/Webkit on desktop and iOS. One way around this problem is to use an IndexedDB Polyfill or Shim that falls back to WebSQL for non-supporting browsers.

See also

Revision Source

<div class="summary">
 <p>ইনডেক্সডডিবি (IndexedDB) ক্লায়েন্ট-সাইড স্টোরেজ এর জন্য একটি এপিআই যা গুরুত্বপূর্ণ পরিমান গাঠনিক ডাটা জমা রাখে এবং যা ইনডেক্স এর সাহায্যে উক্ত ডাটার উপর উচ্চ কর্মক্ষমতাসম্পন্ন&nbsp; অনুসন্ধান চালাতে পারে।যেখানে <a href="/bn-BD/docs/DOM/Storage" title="en-US/docs/DOM/Storage">ডোম স্টোরেজ&nbsp;</a> উপকারী ক্ষুদ্র পরিমান ডাটা জমা রাখার জন্য, এটি কম উপকারী বড় আকারের গাঠনিক ডাটা জমা করার জন্য, সেক্ষেত্রে ইনডেক্সডডিবি(indexedDB) একটি সমাধান প্রদান করে।</p>
</div>
<p>এই পেজটি এপিআই অবজেক্টসমূহের টেকনিক্যাল বিবরণগুলোর&nbsp; প্রবেশপথ হিসেবে কাজ করে। যদি আপনার প্রাথমিক বই এর দরকার হয় তবে আপনার&nbsp; <a href="/bn-BD/docs/IndexedDB/Basic_Concepts_Behind_IndexedDB" title="/en-US/docs/IndexedDB/Basic_Concepts_Behind_IndexedDB">ইনডেক্সডডিবির প্রাথমিক ধারণা&nbsp; </a>দেখা উচিত। আরও বিস্তারিতের জন্য দেখুন&nbsp; <a href="https://developer.mozilla.org/bn-BD/docs/IndexedDB/Using_IndexedDB" title="https://developer.mozilla.org/en-US/docs/IndexedDB/Using_IndexedDB">ইনডেক্সডডিবির ব্যবহার</a> ।</p>
<p>ইনডেক্সডডিবি(IndexedDB)&nbsp; সিনক্রোনাস এবং এসিনক্রোনাস এক্সেস এর জন্য পৃথক এপিআই প্রদান করে। সিনক্রোনাস এপিআই কেবল <a href="/bn-BD/docs/DOM/Worker" title="Worker">ওয়েব ওয়ার্কার&nbsp;</a>&nbsp; এর ভিতরে ব্যবহারের জন্য কিন্তু এটি এখনও কোন ব্রাউজারে বাস্তবায়ন করা হয়নি। এসিনক্রোনাস এপিআই ওয়েবওয়ার্কার এর ভিতরে ও বাইরে উভয় জায়গাতে কাজ করে,কিন্তু ফায়ারফক্সে এখনও বাস্তবায়ন হয়নি।</p>
<h2 id="Asynchronous_API">Asynchronous API</h2>
<p>The asynchronous API methods return without blocking the calling thread. To get asynchronous access to a database, call <a href="/en-US/docs/Web/API/IDBFactory.open"><code>open()</code></a> on the <a href="/en-US/docs/Web/API/IDBEnvironment.indexedDB"><code>indexedDB</code></a> attribute of a <a href="/en-US/docs/DOM/window" title="en-US/docs/DOM/window">window</a> object. This method returns an {{domxref("IDBRequest")}} object; asynchronous operations communicate to the calling application by firing events on {{domxref("IDBRequest")}} objects.</p>
<div class="note">
 <p>Note: The <code>indexedDB</code> object is prefixed in older browser versions (property <code>mozIndexedDB</code> in Gecko &lt; 16, <code>webkitIndexedDB</code> in Chrome, and&nbsp;<code>msIndexedDB</code> in IE 10).</p>
</div>
<p>The interfaces of the asynchronous IndexedDB API are as follows:</p>
<dl>
 <dt>
  {{domxref("IDBFactory")}}</dt>
 <dd>
  Provides access to a database. This is the interface implemented by the global object <a href="/en-US/docs/Web/API/IDBEnvironment.indexedDB"><code>indexedDB</code></a> and is therefore the entry point for the API.</dd>
 <dt>
  {{domxref("IDBCursor")}}</dt>
 <dd>
  Iterates over object stores and indexes.</dd>
 <dt>
  {{domxref("IDBCursorWithValue")}}</dt>
 <dd>
  Iterates over object stores and indexes and returns the cursor's current value.</dd>
 <dt>
  {{domxref("IDBDatabase")}}</dt>
 <dd>
  Represents a connection to a database. It's the only way to get a transaction on the database.</dd>
 <dt>
  {{domxref("IDBEnvironment")}}</dt>
 <dd>
  Provides access to a client-side database. It is implemented by the {{ domxref("window") }} and {{ domxref("worker") }} objects.</dd>
 <dt>
  {{domxref("IDBIndex")}}</dt>
 <dd>
  Provides access to the metadata of an index.</dd>
 <dt>
  {{domxref("IDBKeyRange")}}</dt>
 <dd>
  Defines a range of keys.</dd>
 <dt>
  {{domxref("IDBObjectStore")}}</dt>
 <dd>
  Represents an object store.</dd>
 <dt>
  {{domxref("IDBOpenDBRequest")}}</dt>
 <dd>
  Represents a request to open a database.</dd>
 <dt>
  {{domxref("IDBRequest")}}</dt>
 <dd>
  Provides access to results of asynchronous requests to databases and database objects. It is what you get when you call an asynchronous method.</dd>
 <dt>
  {{domxref("IDBTransaction")}}</dt>
 <dd>
  Represents a transaction. You create a transaction on a database, specify the scope (such as which object stores you want to access), and determine the kind of access (read only or write) that you want.</dd>
</dl>
<ul>
</ul>
<p>An early version of the specification also defined these now removed interfaces. They are still documented in case you need to update previously written&nbsp;code:</p>
<dl>
 <dt>
  {{domxref("IDBVersionChangeRequest")}}</dt>
 <dd>
  Represents a request to change the version of a database. The way to change the version of the database has since changed (by calling {{domxref("IDBFactory.open")}} without also calling {{domxref("IDBDatabase.setVersion")}}), and the interface {{domxref("IDBOpenDBRequest")}} now has the functionality of the removed {{domxref("IDBVersionChangeRequest")}}.</dd>
 <dt>
  {{domxref("IDBDatabaseException")}}&nbsp; {{ obsolete_inline() }}</dt>
 <dd>
  Represents exception conditions that can be encountered while performing database operations.</dd>
</dl>
<ul>
</ul>
<div class="note">
 <p><strong>Note</strong>: There is also a <a href="/en-US/docs/IndexedDB/Syncronous_API" title="/en-US/docs/IndexedDB/SyncronousAPI">synchronous version of the API</a>.&nbsp; The Synchronous API has not been implemented in any browser.&nbsp; It is intended for use with <a href="/en-US/docs/DOM/Using_web_workers" title="https://developer.mozilla.org/en-US/docs/Using_web_workers">WebWorkers</a>.</p>
</div>
<h2 id="Storage_limits">Storage limits</h2>
<p>There isn't any limit on a single database item's size. However there may be a limit on each IndexedDB database's size. This limit (and the way the user interface will assert it) may vary from one browser to another:</p>
<ul>
 <li>
  <p>Firefox: no limit on the IndexedDB database's size. The user interface will just ask permission for storing blobs bigger than 50 MB. This size quota can be customized through the <code>dom.indexedDB.warningQuota</code> preference (which is defined in <a href="http://mxr.mozilla.org/mozilla-central/source/modules/libpref/src/init/all.js" title="http://mxr.mozilla.org/mozilla-central/source/modules/libpref/src/init/all.js">http://mxr.mozilla.org/mozilla-central/source/modules/libpref/src/init/all.js</a>).</p>
 </li>
 <li>
  <p>Google Chrome: see <a class="link-https" href="https://developers.google.com/chrome/whitepapers/storage#temporary" rel="freelink">https://developers.google.com/chrome...rage#temporary</a></p>
 </li>
</ul>
<h2 id="Example" name="Example">Examples</h2>
<ul>
 <li>A powerful example of what IndexedDB can be utilized for on the web is the example by Marco Castelluccio, winner of the IndexedDB Mozilla DevDerby. The winning demo was <a href="/en-US/demos/detail/elibri" title="https://developer.mozilla.org/en-US/demos/detail/elibri">eLibri</a>, a library and eBook reader application.</li>
 <li>You should also check out the reference application for the examples in the reference docs: <a class="external" href="https://github.com/chrisdavidmills/to-do-notifications/tree/gh-pages">To-do Notifications</a> (<a class="external" href="http://chrisdavidmills.github.io/to-do-notifications/">view example live</a>.) Not every snippet appears in this example, but every example uses the same data structure and syntax, and will make sense in the context of this application.</li>
</ul>
<h2 id="Browser_compatibility" name="Browser_compatibility">Browser compatibility</h2>
<p>{{ CompatibilityTable() }}</p>
<div id="compat-desktop">
 <table class="compat-table">
  <tbody>
   <tr>
    <th>Feature</th>
    <th>Chrome</th>
    <th>Firefox (Gecko)</th>
    <th>Internet Explorer</th>
    <th>Opera</th>
    <th>Safari (WebKit)</th>
   </tr>
   <tr>
    <td>Asynchronous API</td>
    <td>
     <p>11.0 {{ property_prefix("webkit") }}<br />
      24</p>
    </td>
    <td>{{ CompatGeckoDesktop("2.0") }} {{ property_prefix("moz") }}<br />
     {{ CompatGeckoDesktop("16.0") }}</td>
    <td>10</td>
    <td>17</td>
    <td>{{ CompatNo() }}</td>
   </tr>
   <tr>
    <td>Synchronous API<br />
     (used with <a href="/en-US/docs/DOM/Using_web_workers" title="https://developer.mozilla.org/en-US/docs/Using_web_workers">WebWorkers</a>)</td>
    <td>{{ CompatNo() }}</td>
    <td>{{ CompatNo() }}<br />
     See {{ bug(701634) }}</td>
    <td>{{ CompatNo() }}</td>
    <td>{{ CompatNo() }}</td>
    <td>{{ CompatNo() }}</td>
   </tr>
  </tbody>
 </table>
</div>
<div id="compat-mobile">
 <table class="compat-table">
  <tbody>
   <tr>
    <th>Feature</th>
    <th>Android</th>
    <th>Firefox Mobile (Gecko)</th>
    <th>IE Phone</th>
    <th>Opera Mobile</th>
    <th>Safari Mobile</th>
   </tr>
   <tr>
    <td>Asynchronous API</td>
    <td>4.4</td>
    <td>{{ CompatGeckoDesktop("6.0") }} {{ property_prefix("moz") }}<br />
     {{ CompatGeckoDesktop("16.0") }}</td>
    <td>10</td>
    <td>17</td>
    <td>{{ CompatNo() }}</td>
   </tr>
  </tbody>
 </table>
</div>
<div class="note">
 <p>Note: Some browsers don't yet support IndexedDB but <a href="http://caniuse.com/sql-storage" title="http://caniuse.com/sql-storage">do support WebSQL</a>, most notably Safari/Webkit on desktop and iOS. One way around this problem is to use an <a href="https://github.com/axemclion/IndexedDBShim" title="https://github.com/axemclion/IndexedDBShim">IndexedDB Polyfill or Shim</a> that falls back to WebSQL for non-supporting browsers.</p>
</div>
<h2 id="See_also">See also</h2>
<ul>
 <li><a href="/en-US/docs/IndexedDB/Basic_Concepts_Behind_IndexedDB" title="en-US/docs/IndexedDB/Basic Concepts Behind IndexedDB">Basic Concepts About IndexedDB</a></li>
 <li><a href="/en-US/docs/IndexedDB/Using_IndexedDB" title="en-US/docs/IndexedDB/IndexedDB primer">Using IndexedDB</a></li>
 <li><a class="external" href="http://hacks.mozilla.org/2012/02/storing-images-and-files-in-indexeddb/" title="http://hacks.mozilla.org/2012/02/storing-images-and-files-in-indexeddb/">Storing images and files in IndexedDB</a></li>
 <li><a class="external" href="http://www.w3.org/TR/IndexedDB/" title="http://www.w3.org/TR/IndexedDB/">Indexed Database API specification </a></li>
 <li><a class="external" href="http://msdn.microsoft.com/en-us/scriptjunkie/gg679063.aspx" title="http://msdn.microsoft.com/en-us/scriptjunkie/gg679063.aspx">IndexedDB — The Store in Your Browser</a></li>
 <li><a class="external" href="http://nparashuram.com/IndexedDB/trialtool/index.html" title="http://nparashuram.com/IndexedDB/trialtool/index.html">IndexedDB Examples</a></li>
 <li><a href="https://github.com/axemclion/IndexedDBShim" title="https://github.com/axemclion/IndexedDBShim">IndexedDB Polyfill/Shim</a> for browsers that only support WebSQL (e.g. mobile WebKit)</li>
 <li><a href="http://nparashuram.com/IndexedDBShim/" title="http://nparashuram.com/IndexedDBShim/">JQuery IndexedDB plugin</a></li>
</ul>
Revert to this revision