SQL vs NOSQL

Sr No
SQL
NOSQL
1
SQL databases provide store of related data tables
NOSQL databases store JSON-like filed value pair documents
2
SQL tables create a strict data template, so it’s difficult to make mistakes
NoSQL is more flexible. It can store any data anywhere which leads to consistency issues.
3
SQL has schema information such as primary keys, indexes and relationships.
In NoSQL data can be added anywhere anytime. There is no need to specify document design. NOSQL generally adds id value automatically to each document.
4
When data requirement is clear SQL is more suitable
When data requirement is not clear NOSQL is more suitable
         
5
SQL enforces data integrity rules using foreign key constraints
Ideally one documents has all the information.
6
SQL transactions ensure that either all operations are successful or failed.
Updating document is atomic. But there are no transaction equivalent of updating multiple documents
7
SQL is lightweight declarative language

For example :

INSERT INTO book (
  `ISBN`, `title`, `author`
)
VALUES (
  '9780992461256',
  'Full Stack JavaScript',
  'Colin Ihrig & Adam Bretz'
);
UPDATE book
SET price = 19.99
WHERE ISBN = '9780992461256'


NOSQL queries are JSON-like.

For example :

db.book.insert({
  ISBN: "9780992461256",
  title: "Full Stack JavaScript",
  author: "Colin Ihrig & Adam Bretz"
});










db.book.update(
  { ISBN: '9780992461256' },
  { $set: { price: 19.99 } }
);

9
A well-designed SQL database will almost certainly perform better than a badly designed NoSQL equivalent and vice versa.

Generally NOSQL is faster than SQL
10
To distribute load on multiple servers is tricky in SQL
Very easy to scale
11
SQL faces less issues as compared to NOSQL
System admins has less experience to NOSQL databases which lead to security or system problems.
12
Where to use SQL:

  1. Data requirement is known
  2. Data integrity is essential
Where to use NOSQL:

1. Evolving data requirement
  2. Speed and scalability is imperative




Secure execution environment and communication in cloud

How does one can ensure secure execution environments and communications in cloud ?

In a cloud environment, applications are run on different servers in a distributed mode. These applications interact with the outside world and other applications and may contain sensitive information whose inappropriate access would be harmful to a client. In addition, cloud computing is increasingly being used to manage and store huge amounts of data in database applications that are also co-located with other users’ information. Thus, it is extremely important for the cloud supplier to provide a secure execution environment and secure communications for client applications and storage. 

Secure Execution Environment 

Configuring computing platforms for secure execution is a complex task; and in many instances it is not performed properly because of the large number of parameters that are involved. This provides opportunities for malware to exploit vulnerabilities, such as downloading code embedded in data and having the code executed at a high privilege level.
In cloud computing, the major burden of establishing a secure execution environment is transferred from the client to the cloud provider. However, protected data transfers must be established through strong authentication mechanisms, and the client must have practices in place to address the privacy and confidentiality of information that is exchanged with the cloud. In fact, the client’s port to the cloud might provide an attack path if not properly provisioned with security measures. Therefore, the client needs assurance that computations and data exchanges are conducted in a secure environment. This assurance is affected by trust enabled by cryptographic methods. Also, research into areas such as compiler-based virtual machines promises a more secure execution environment for operating systems.
Another major concern in secure execution of code is the widespread use of “unsafe” programming languages such as C and C++ instead of more secure languages such as object-oriented Java and structured, object-oriented C#.

Secure Communications 

As opposed to having managed, secure communications among the computing resources internal to an organization, movement of applications to the cloud requires a reevaluation of communications security. These communications apply to both data in motion and data at rest.

Secure cloud communications involves the structures, transmission methods, transport formats, and security measures that provide confidentiality, integrity, availability, and authentication for transmissions over private and public communications networks. Secure cloud computing communications should ensure the following: 

Confidentiality — Ensures that only those who are supposed to access data can retrieve it. Loss of confidentiality can occur through the intentional release of private company information or through a misapplication of network rights. Some of the elements of telecommunications used to ensure confidentiality are as follows:
               Network security protocols
             
Network authentication services  

               Data encryption services 
 
Integrity — Ensures that data has not been changed due to an accident or malice. Integrity is the guarantee that the message sent is the message received and that the message is not intentionally or unintentionally altered. Integrity also contains the concept of non-repudiation of a message source. Some of the constituents of integrity are as follows:
               Firewall services
             
Communications Security Management 

               Intrusion detection services 

Availability — Ensures that data is accessible when and where it is needed, and that connectivity is accessible when needed, allowing authorized users to access the network or systems. Also included in that assurance is the guarantee that security services for the security practitioner are usable when they are needed. Some of the elements that are used to ensure avail- ability are as follows:
  •        Fault tolerance for data availability, such as backups and redundant disk systems
  •        Acceptable logins and operating process performances
  •        Reliable and inter-operable security processes and network security
              mechanisms



Virtual Machines


What is Virtual Machine? Discuss VMM in detail. 


A virtual machine (VM) is an operating system OS or application environment that is installed on software which imitates dedicated hardware. The end user has the same experience on a virtual machine as they would have on dedicated hardware.

  Figure 1: VMM high level architecture             
VMM high level architecture 

A VMM implementation is made of various core components that are required for every VMM installation.

The following components are central to each VMM installation:
  • VMM server
  • VMM database
  • VMM Windows PowerShell cmdlet interface
  • VMM administrator console
  • VMM library
  • Managed virtualization hosts
  • VMM Self-Service Portal 
  • Managed virtualization managers [ Optional ]
  • OpsMgr management packs for monitoring, reporting and PRO [Optional] 
Managed virtualization managers and OpsMgr are optional components.

VMM Server and VMM Database 

The VMM server contains the core Windows service that includes VMM engine. The VMM database can reside either locally on VMM server or on a remote database server.

VMM Administrator Console 

It is main user interface for managing a virtualized infrastructure using VMM.
Administartor Console has five main views and one optional view :

  1. Host view 
  2. virtualized machines view 
  3. Jobs view
  4. Library view
  5. Administration view
  6. Reporting view [optional]