Nosql入门知识

Jun 07, 2016 pm 02:53 PM
nosql はじめる 関連した データベース 知識

1. NoSQL其实是关系型数据库相对应的,是no relational 即非关系型数据库;web2.0特别是一些用户访问量比较大的网站如:www.taobao.com weibo.com baidu.com 每秒的访问量可能是上万次(10K);传统的关系型数据库 mysql oracle 每秒进行10K次数据查询还可以勉

1. NoSQL其实是关系型数据库相对应的,是no relational 即非关系型数据库;web2.0特别是一些用户访问量比较大的网站如:www.taobao.com weibo.com baidu.com

每秒的访问量可能是上万次(10K);传统的关系型数据库 mysql oracle 每秒进行10K次数据查询还可以勉强应付,但是如果是每秒10K次读写数据库,因为数据库的数据都是卸载磁盘中,所以磁盘IO也是支撑不住每秒10K的读写。

在web的架构中,数据库是最难进行横向扩展的(通过简单的添加机器和硬件,也就是添加一些服务节点来提高负载均衡能力);对于7*24小时在线的网站来说,对关系型数据库进行升级和扩展(分布式扩展--分库分表)是非常痛苦的事情,往往要进行停机维护;但这种对www.taobao.com 来说是非常丑陋的事情。[--可不可以添加几台服务器然后把复制,然后进行负载均衡--]。

NoSQL 是采用key/value的结构来存储数据,而且大多数的NoSQL采用内存来存储数据,一段时间后把数据同步到磁盘中;由于使用内存保存数据很好地解决了高并发读写的问题;其次NoSQL提供了根据key值进行横向分表(比如:用户id,每2000w数据放到一台数据库服务器中的一张用户表中);同时实现了主从数据库互备,这样可以让数据库的动态迁移变得简单,让数据库服务器的横向扩展变得容易了。

 

2. 分布式数据库的CAP理论

 CAP理论是说Consistency(一致性), Availability(可用性), partition tolerance(分布)三部分系统;而且任何系统只会满足两个,不会有任何的系统会同时满足这三个条件;在传统的关系型数据库中是强调C 一致性,但是在满足高可用性(高并发时效率不高),高扩展性(分布式数据库进行横向扩展)存在一定的缺陷。但是NoSQL在进行设计的时候就是针对并发海量数据存储的情况下进行设计的,在这种高并发海量数据下数据一致性并不像银行那样保持数据的强一致性,所以NoSQL·放弃强一致性的追求,从而达到更高的可用性和扩展性,通过“鸽巢原理”达到最终的一致性。

现在的数据库系统肯定是同一个时刻有多个进程对数据库进行读写操作,假设现在有3个进程(A、B、C)对数据库的某表进行操作,

强一致性:A写入的数据x,B、C可以读到数据x
弱一致性:A写入的数据x,B、C一段时间内读不到,最后会读到
最终一致性:是一种特殊的一致性,保证在一段时间内没有数据的更新,但所有的返回都是把最新的数据返回;---缓存的概念,一段时间后把数据更新到数据库,达到最终一致性。
3. 哈希算法
(1). 哈希算法的基本原理:
     哈希算法的提出和应用背景,对于一个庞大的字符串数组array,给你一个字符串让你判断它是否在这个字符串数组中并找到它,最好的办法就是把这个庞大的字符串数组构建成一个哈希表,然后在进行查询是否有这个字符串。
 (2).构建hash table的过程:一般是采用一个32的整数来代表一个字符串,首先这个array的字符串已经存在内存或者磁盘中,我们要做的只是按照一定的算法把每个字符串映射到一个32位的整数,每个int占4个字节,在字符串中每个字符都占一个字节;这样就建立了字符串与32位整数的映射,然后根据程序大小设定一个hash table的Size(这个Size确保所有的int % Size的值是唯一的--取最大值即可),这个把刚才得到的所有字符串对应的32位整数对这个Size进行取模,这个模值就是此整数在hash table的位置;这个位置与每一个字符串又建立了一个映射关系;这样让你查询这个str是否在array中?
首先,是把这个str,用相同的哈希算法进行编码---->映射到一个32位的int型数据 num
然后,把这个num % Size 获取此字符串在hash table里面的位置;
然后,判断hash table 此位置是否已经有数据占用,如果已经占用说明在array里面有一个字符串对应的32位整数与str的32位整数相同,在一个字符串对应唯一一个32位整数的前提条件下,就说明array里面存在字符串str。
[html] 
int GetHashTablePos(char *lpszString, SOMESTRUCTURE *lpTable, int nTableSize) 
{ //lpszSring--要查询的字符串;lpTable 哈希表;nTableSize是哈希表的Size 
int nHash = HashString(lpszString), nHashPos = nHash % nTableSize; 
 
if (lpTable[nHashPos].bExists && !strcmp(lpTable[nHashPos].pString, lpszString))  //时间复杂度是O(1) 
  return nHashPos; 
else 
  return -1; //Error value 

(3).  上面的处理方法是假设一个字符串通过一个哈希算法只得到唯一一个hashcode(32为int整数);但是如果存在两个整数在同一个哈希算法得到同一个hashcode,那这个查询就不正确的,虽然这个可能性比较小,但确实存在这个风险。
采用的解决办法是用多个不同的哈希算法来校验,两个str 在三个不同的哈希算法得到的hashcode都相同的概率是:1/18889465931478580854784;可以认为是OK的。
[html] 
int GetHashTablePos(char *lpszString, MPQHASHTABLE *lpTable, int nTableSize) 

const int HASH_OFFSET = 0, HASH_A = 1, HASH_B = 2; 
int nHash = HashString(lpszString, HASH_OFFSET); 
int nHashA = HashString(lpszString, HASH_A); 
int nHashB = HashString(lpszString, HASH_B); 
int nHashStart = nHash % nTableSize, nHashPos = nHashStart; 
while (lpTable[nHashPos].bExists) 

  if (lpTable[nHashPos].nHashA == nHashA && lpTable[nHashPos].nHashB == nHashB) 
   return nHashPos; 
  else 
   nHashPos = (nHashPos + 1) % nTableSize; 
  if (nHashPos == nHashStart) 
   break; 

return -1; //Error value 

这样就可以保证万无一失了!
(4). 常见的哈希算法:MD5 SHA  SHA-1等都是常用的哈希算法,而且他们都属于混合哈希算法,除了混合哈希算法还有加法、乘法、除法的哈希算法;
所以,在比较一个文件是否发生变化的方法出了可以用最后修改时间来判断,也可以用其哈希code来比较,比如用MD5来比较,如果其MD5都变化了则文件一定被修改了。

4. Tair 缓存也是一种 基于key/value的NoSQL结构开发的一种缓存机制,其实质也是NoSQL数据库,不过是key/value结构而且是用内存来存储数据,所以用把Tair叫做缓存。
 5. 关系型数据库的事务(ACID)
(1). 事务(Transaction):Transaction是访问并可能更新数据库中各种数据项的一个程序执行单元(unit),事务一般由高级数据语言(C++ Java SQL)等写的用户程序引起的,并用begin transaction----end transaction 来界定一个完整的事务
[html] 
 
**** 
**** 
**** 
transaction> 
一个完整的事务由begin transaction----end transaction  里面的所有操作组成;在关系型数据库中一个事务可以是一条SQL语句或一组SQL语句或者是一个程序;事务是并发和回滚的基本单位。
(2). 事务的ACID属性:
Atomicity(原子性):一个事务是一个不可分割的完整单元,一个transaction里面的所有操作要么都做完,要么都不做;当中间一个操作失败把所有已经做的操作都回滚!www.2cto.com
Consistency(一致性):数据库在一个事务开始前是一致性的,在这个事务执行完毕后仍然是一致性的;只是从一个一致性状态到另一个一致性状态;但都是一致性的
Isolation(隔离性):一个事务的执行不能被其他事务所打扰,即一个事务内部操作及使用的数据对并发的事务是隔离的,并发执行的事务之间互相不干扰(不理解)!!
Durablity(持久性):也就永久性(Permanence),即一个事务一旦执行完毕,则它对数据库的更新是持久性的,即不受其他操作的影响;也就是事务修改了数据库了
这个ACID的属性是关系型数据库(DBMS)非常重要的属性,在执行数据库操作时必须满足ACID属性,其中AI是我们编程中要注意的地方。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ワンクリックでPPTを生成!キミ: まずは「PPT出稼ぎ労働者」を普及させましょう ワンクリックでPPTを生成!キミ: まずは「PPT出稼ぎ労働者」を普及させましょう Aug 01, 2024 pm 03:28 PM

キミ: たった 1 文の PPT がわずか 10 秒で完成します。 PPTはとても面倒です!会議を開催するには PPT が必要であり、週次報告書を作成するには PPT が必要であり、投資を勧誘するには PPT を提示する必要があり、不正行為を告発するには PPT を送信する必要があります。大学は、PPT 専攻を勉強するようなものです。授業中に PPT を見て、授業後に PPT を行います。おそらく、デニス オースティンが 37 年前に PPT を発明したとき、PPT がこれほど普及する日が来るとは予想していなかったでしょう。 PPT 作成の大変な経験を話すと涙が出ます。 「20 ページを超える PPT を作成するのに 3 か月かかり、何十回も修正しました。PPT を見ると吐きそうになりました。」 「ピーク時には 1 日に 5 枚の PPT を作成し、息をすることさえありました。」 PPTでした。」 即席の会議をするなら、そうすべきです

CVPR 2024 のすべての賞が発表されました!オフラインでのカンファレンスには1万人近くが参加し、Googleの中国人研究者が最優秀論文賞を受賞した CVPR 2024 のすべての賞が発表されました!オフラインでのカンファレンスには1万人近くが参加し、Googleの中国人研究者が最優秀論文賞を受賞した Jun 20, 2024 pm 05:43 PM

北京時間6月20日早朝、シアトルで開催されている最高の国際コンピュータビジョンカンファレンス「CVPR2024」が、最優秀論文やその他の賞を正式に発表した。今年は、最優秀論文 2 件と学生優秀論文 2 件を含む合計 10 件の論文が賞を受賞しました。また、最優秀論文ノミネートも 2 件、学生優秀論文ノミネートも 4 件ありました。コンピュータービジョン (CV) 分野のトップカンファレンスは CVPR で、毎年多数の研究機関や大学が集まります。統計によると、今年は合計 11,532 件の論文が投稿され、2,719 件が採択され、採択率は 23.6% でした。ジョージア工科大学による CVPR2024 データの統計分析によると、研究テーマの観点から最も論文数が多いのは画像とビデオの合成と生成です (Imageandvideosyn

ベアメタルから 700 億のパラメータを備えた大規模モデルまで、チュートリアルとすぐに使えるスクリプトがここにあります ベアメタルから 700 億のパラメータを備えた大規模モデルまで、チュートリアルとすぐに使えるスクリプトがここにあります Jul 24, 2024 pm 08:13 PM

LLM が大量のデータを使用して大規模なコンピューター クラスターでトレーニングされていることはわかっています。このサイトでは、LLM トレーニング プロセスを支援および改善するために使用される多くの方法とテクノロジが紹介されています。今日、私たちが共有したいのは、基礎となるテクノロジーを深く掘り下げ、オペレーティング システムさえ持たない大量の「ベア メタル」を LLM のトレーニング用のコンピューター クラスターに変える方法を紹介する記事です。この記事は、機械がどのように考えるかを理解することで一般的な知能の実現に努めている AI スタートアップ企業 Imbue によるものです。もちろん、オペレーティング システムを持たない大量の「ベア メタル」を LLM をトレーニングするためのコンピューター クラスターに変換することは、探索と試行錯誤に満ちた簡単なプロセスではありませんが、Imbue は最終的に 700 億のパラメータを備えた LLM のトレーニングに成功しました。プロセスが蓄積する

AIの活用 | AIが一人暮らしの女の子の生活ビデオブログを作成、3日間で数万件の「いいね!」を獲得 AIの活用 | AIが一人暮らしの女の子の生活ビデオブログを作成、3日間で数万件の「いいね!」を獲得 Aug 07, 2024 pm 10:53 PM

Machine Power Report 編集者: Yang Wen 大型モデルや AIGC に代表される人工知能の波は、私たちの生活や働き方を静かに変えていますが、ほとんどの人はまだその使い方を知りません。そこで、直感的で興味深く、簡潔な人工知能のユースケースを通じてAIの活用方法を詳しく紹介し、皆様の思考を刺激するコラム「AI in Use」を立ち上げました。また、読者が革新的な実践的な使用例を提出することも歓迎します。ビデオリンク: https://mp.weixin.qq.com/s/2hX_i7li3RqdE4u016yGhQ 最近、Xiaohongshu で一人暮らしの女の子の生活 vlog が人気になりました。イラスト風のアニメーションといくつかの癒しの言葉を組み合わせれば、数日で簡単に習得できます。

RAG の 12 の問題点を数え上げ、NVIDIA シニア アーキテクトが解決策を教える RAG の 12 の問題点を数え上げ、NVIDIA シニア アーキテクトが解決策を教える Jul 11, 2024 pm 01:53 PM

検索拡張生成 (RAG) は、検索を使用して言語モデルを強化する手法です。具体的には、言語モデルは回答を生成する前に、広範な文書データベースから関連情報を取得し、この情報を使用して生成プロセスをガイドします。このテクノロジーにより、コンテンツの精度と関連性が大幅に向上し、幻覚の問題を効果的に軽減し、知識の更新速度が向上し、コンテンツ生成の追跡可能性が向上します。 RAG は間違いなく、人工知能研究の中で最もエキサイティングな分野の 1 つです。 RAGについて詳しくは、当サイトのコラム記事「大型モデルの欠点を補うことに特化したRAGの新展開とは?」を参照してください。このレビューはそれを明確に説明しています。」しかし、RAG は完璧ではなく、ユーザーはそれを使用するときにいくつかの「問題点」に遭遇することがよくあります。最近、NVIDIA の生成 AI 高度なソリューション

iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます Jul 18, 2024 am 05:48 AM

Apple の最新リリースの iOS18、iPadOS18、および macOS Sequoia システムでは、さまざまな理由で紛失または破損した写真やビデオをユーザーが簡単に回復できるように設計された重要な機能が写真アプリケーションに追加されました。この新機能では、写真アプリのツール セクションに「Recovered」というアルバムが導入され、ユーザーがデバイス上に写真ライブラリに含まれていない写真やビデオがある場合に自動的に表示されます。 「Recovered」アルバムの登場により、データベースの破損、カメラ アプリケーションが写真ライブラリに正しく保存されない、または写真ライブラリを管理するサードパーティ アプリケーションによって失われた写真やビデオに対する解決策が提供されます。ユーザーはいくつかの簡単な手順を実行するだけで済みます

PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル Jun 04, 2024 pm 01:42 PM

MySQLi を使用して PHP でデータベース接続を確立する方法: MySQLi 拡張機能を含める (require_once) 接続関数を作成する (functionconnect_to_db) 接続関数を呼び出す ($conn=connect_to_db()) クエリを実行する ($result=$conn->query()) 閉じる接続 ( $conn->close())

PHP でデータベース接続エラーを処理する方法 PHP でデータベース接続エラーを処理する方法 Jun 05, 2024 pm 02:16 PM

PHP でデータベース接続エラーを処理するには、次の手順を使用できます。 mysqli_connect_errno() を使用してエラー コードを取得します。 mysqli_connect_error() を使用してエラー メッセージを取得します。これらのエラー メッセージをキャプチャしてログに記録することで、データベース接続の問題を簡単に特定して解決でき、アプリケーションをスムーズに実行できるようになります。

See all articles