Skip to main content

Comparison with SQL

SQL (Structured Query Language) is a standard language for managing and manipulating relational databases. This page compares TinyFrameJS with SQL, highlighting similarities, differences, and use cases for each.

Overview​

FeatureTinyFrameJSSQL
Primary useIn-memory data manipulation in JavaScriptDatabase querying and management
EnvironmentBrowser, Node.jsDatabase servers, embedded systems
Data structureDataFrame objectsTables in relational databases
Learning curveModerate for JavaScript developersModerate, widely taught
PerformanceOptimized for in-memory operationsOptimized for disk-based operations and indexing
IntegrationSeamless with web applicationsRequires database connection

Syntax Comparison​

Creating Data​

TinyFrameJS:

import { DataFrame } from 'tinyframejs';

// Create a DataFrame
const employees = new DataFrame([
{id: 1, name: 'Alice', department: 'Engineering', salary: 75000},
{id: 2, name: 'Bob', department: 'Marketing', salary: 65000},
{id: 3, name: 'Charlie', department: 'Engineering', salary: 80000},
{id: 4, name: 'David', department: 'Sales', salary: 70000}
]);

SQL:

-- Create a table
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
department VARCHAR(100),
salary INT
);

-- Insert data
INSERT INTO employees (id, name, department, salary) VALUES
(1, 'Alice', 'Engineering', 75000),
(2, 'Bob', 'Marketing', 65000),
(3, 'Charlie', 'Engineering', 80000),
(4, 'David', 'Sales', 70000);

Filtering Data​

TinyFrameJS:

// Filter employees in Engineering department
const engineers = employees.filter(row => row.department === 'Engineering');

SQL:

-- Filter employees in Engineering department
SELECT * FROM employees WHERE department = 'Engineering';

Selecting Columns​

TinyFrameJS:

// Select specific columns
const nameAndSalary = employees.select(['name', 'salary']);

SQL:

-- Select specific columns
SELECT name, salary FROM employees;

Aggregation​

TinyFrameJS:

// Calculate average salary by department
const avgSalaryByDept = employees
.groupby('department')
.agg({
salary: 'mean'
});

SQL:

-- Calculate average salary by department
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department;

Joining Data​

TinyFrameJS:

// Create a second DataFrame
const departments = new DataFrame([
{dept_id: 'Engineering', location: 'Building A'},
{dept_id: 'Marketing', location: 'Building B'},
{dept_id: 'Sales', location: 'Building C'}
]);

// Join employees with departments
const employeesWithLocation = employees.merge(departments, {
left_on: 'department',
right_on: 'dept_id'
});

SQL:

-- Create a departments table
CREATE TABLE departments (
dept_id VARCHAR(100) PRIMARY KEY,
location VARCHAR(100)
);

INSERT INTO departments (dept_id, location) VALUES
('Engineering', 'Building A'),
('Marketing', 'Building B'),
('Sales', 'Building C');

-- Join employees with departments
SELECT e.*, d.location
FROM employees e
JOIN departments d ON e.department = d.dept_id;

When to Use TinyFrameJS vs. SQL​

Choose TinyFrameJS when:​

  • You're working in a JavaScript/web environment
  • You need to manipulate data in memory
  • Your data processing needs to happen client-side
  • You're working with moderate-sized datasets
  • You need to perform complex transformations on data

Choose SQL when:​

  • You're working with large datasets that don't fit in memory
  • You need persistent data storage
  • You require transaction support
  • You need to enforce data integrity constraints
  • You're performing operations on a database

Interoperability​

TinyFrameJS can work well with SQL databases:

// Read data from SQL database
const employees = await DataFrame.readSql({
connection: dbConnection,
query: 'SELECT * FROM employees'
});

// Process data in TinyFrameJS
const processedData = employees
.filter(row => row.salary > 70000)
.groupby('department')
.agg({
salary: ['mean', 'max', 'min']
});

// Write results back to SQL
await processedData.toSql({
connection: dbConnection,
tableName: 'salary_analysis',
ifExists: 'replace'
});

Performance Considerations​

  • SQL databases are optimized for disk-based operations and can handle very large datasets
  • TinyFrameJS is optimized for in-memory operations and is typically faster for smaller datasets
  • SQL excels at indexed lookups and joins on large tables
  • TinyFrameJS is better for complex transformations and interactive analysis

Learning Curve​

  • If you're already familiar with JavaScript, TinyFrameJS will be easier to learn
  • SQL has a standardized syntax that is widely taught and used
  • TinyFrameJS methods are designed to be similar to SQL operations, making the transition easier

Conclusion​

TinyFrameJS and SQL serve different but complementary purposes in the data ecosystem. TinyFrameJS excels at in-memory data manipulation in JavaScript environments, while SQL is the standard for persistent data storage and querying in relational databases. Many applications use both: SQL for data storage and retrieval, and TinyFrameJS for client-side processing and visualization.