TiDB is an open source distributed HTAP database compatible with the MySQL protocol

Last update: Aug 7, 2022

LICENSE Language Build Status Go Report Card GitHub release GitHub release date CircleCI Status Coverage Status GoDoc

What is TiDB?

TiDB ("Ti" stands for Titanium) is an open-source NewSQL database that supports Hybrid Transactional and Analytical Processing (HTAP) workloads. It is MySQL compatible and features horizontal scalability, strong consistency, and high availability.

  • Horizontal Scalability

    TiDB expands both SQL processing and storage by simply adding new nodes. This makes infrastructure capacity planning both easier and more cost-effective than traditional relational databases which only scale vertically.

  • MySQL Compatible Syntax

    TiDB acts like it is a MySQL 5.7 server to your applications. You can continue to use all of the existing MySQL client libraries, and in many cases, you will not need to change a single line of code in your application. Because TiDB is built from scratch, not a MySQL fork, please check out the list of known compatibility differences.

  • Distributed Transactions

    TiDB internally shards table into small range-based chunks that we refer to as "Regions". Each Region defaults to approximately 100 MiB in size, and TiDB uses an optimized Two-phase commit to ensure that Regions are maintained in a transactionally consistent way.

  • Cloud Native

    TiDB is designed to work in the cloud -- public, private, or hybrid -- making deployment, provisioning, operations, and maintenance simple.

    The storage layer of TiDB, called TiKV, is a Cloud Native Computing Foundation (CNCF) Graduated project. The architecture of the TiDB platform also allows SQL processing and storage to be scaled independently of each other in a very cloud-friendly manner.

  • Minimize ETL

    TiDB is designed to support both transaction processing (OLTP) and analytical processing (OLAP) workloads. This means that while you may have traditionally transacted on MySQL and then Extracted, Transformed and Loaded (ETL) data into a column store for analytical processing, this step is no longer required.

  • High Availability

    TiDB uses the Raft consensus algorithm to ensure that data is highly available and safely replicated throughout storage in Raft groups. In the event of failure, a Raft group will automatically elect a new leader for the failed member, and self-heal the TiDB cluster without any required manual intervention. Failure and self-healing operations are also transparent to applications.

For more details and latest updates, see TiDB docs and release notes.

Community

You can join these groups and chats to discuss and ask TiDB related questions:

In addition, you may enjoy following:

For support, please contact PingCAP.

Quick start

To start using TiDB

See Quick Start Guide.

To start developing TiDB

See Get Started chapter of TiDB Dev Guide.

Contributing

The community repository hosts all information about the TiDB community, including how to contribute to TiDB, how TiDB community is governed, how special interest groups are organized, etc.

contribution-map

Contributions are welcomed and greatly appreciated. See Contribution to TiDB for details on typical contribution workflows. For more contributing information, click on the contributor icon above.

Adopters

View the current list of in-production TiDB adopters here.

Case studies

Architecture

architecture

License

TiDB is under the Apache 2.0 license. See the LICENSE file for details.

Acknowledgments

GitHub

https://github.com/pingcap/tidb
Comments
  • 1. privilege: fix `REVOKE` privilege check incompatibility with MySQL (#13014)

    cherry-pick #13014 to release-3.0


    What problem does this PR solve?

    Originally, execute REVOKE query demand user have SuperPriv, which is incompatibility with MySQL in such case.

    create user u1;
    create user u2;
    grant select on *.* to u1 with grant option.
    grant select on *.* to u2;
    // login as u1
    revoke select on *.* from u2;
    

    TiDB will return error, MySQL is ok.

    What is changed and how it works?

    change privilege check for REVOKE like GRANT. If a user has grant option on some object like table or db, he can revoke privilege on these object from other users.

    Check List

    Tests

    • Unit test

    Code changes

    Side effects

    • Increased code complexity

    Related changes

    • Need to cherry-pick to the release branch

    Release note

    • fix privilege check for REVOKE
    Reviewed by sre-bot at 2019-11-09 03:03
  • 2. ddl: support concurrent ddl

    Signed-off-by: Weizhen Wang [email protected] Signed-off-by: xiongjiwei [email protected] Signed-off-by: wjhuang2016 [email protected]

    What problem does this PR solve?

    Issue Number: ref https://github.com/pingcap/tidb/issues/32031

    this is a big PR and we split it into many commits, every commit almost has a single purpose. I will introduce them briefly, you may need to reference the doc https://github.com/pingcap/tidb/pull/33629

    • init ddl tables create tidb_ddl_job, tidb_ddl_reorg, tidb_ddl_history tables with raw meta write, these 3 tables is use to replace the ddl job queue and reorg and history hash table. you can see this part in doc

    • setup concurrent ddl env and add ddl worker pool this commit adds the ddl worker pool definition, the ddl job manager will find a job and ship it to a worker in the worker pool. Also, this commit provides a sessionctx wrapper, only use in ddl relate. it just wraps begin, commit and execute.

    • add ddl manager to handle ddl job this commit implements the ddl manager, which is used for

      • find a runnable ddl job
      • ship the job to the worker

      you can ref the doc. Also, it adds a function HandleDDLJob which will do the ddl job, and it is a replacer of HandleDDLJobQueue. The last thing of this commit is adding schemaVersionManager to update the schema version in a new txn, it prevents the txn conflict with the schema version key.

    • reorg handler for concurrent ddl just implements the partner of the reorg information.

    • manage ddl jobs for concurrent ddl same as above, the partner of add job, delete job and many other related to history job

    • change ddl interface caller because many of the functions need a session now, we just change the caller

    • add metrics for concurrent ddl add metrics

    • migrate ddl between table and queue support switch between the old and new ddl framework, migrate the existing ddl job between queue and table

    What is changed and how it works?

    Check List

    Tests

    • [x] Unit test
    • [ ] Integration test
    • [ ] Manual test (add detailed scripts or steps below)
    • [ ] No code

    Release note

    None
    
    Reviewed by hawkingrei at 2022-02-08 10:15
  • 3. planner: Implement PointGet in TryFastPlan for range/list paritition table

    What problem does this PR solve?

    Issue Number: related to #24476, #24150

    Problem Summary:

    • planner: Implement PointGet in TryFastPlan for range/list paritition table. Will implement BatchGet in the next PR.

    What is changed and how it works?

    What's Changed:

    • Change the tryPointGetPlan logic. Let it permit other types of partition table other than hash partition table. Add logic to locate partition table.

    How it Works:

    • After getting paris variable, we use it to locate the partition where data point lies.

    Check List

    Tests

    • Unit test

    Side effects

    • N/A

    Release note

    • planner: Implement PointGet in TryFastPlan for range/list paritition table
    Reviewed by zhuo-zhi at 2021-05-12 10:13
  • 4. Release 4.0

    What problem does this PR solve?

    Issue Number: close #xxx

    Problem Summary:

    What is changed and how it works?

    Proposal: xxx

    What's Changed:

    How it Works:

    Related changes

    • PR to update pingcap/docs/pingcap/docs-cn:
    • Need to cherry-pick to the release branch

    Check List

    Tests

    • Unit test
    • Integration test
    • Manual test (add detailed scripts or steps below)
    • No code

    Side effects

    • Performance regression
      • Consumes more CPU
      • Consumes more MEM
    • Breaking backward compatibility

    Release note

    Reviewed by alex-quan-001 at 2021-03-09 14:43
  • 5. br: support batch create table for restore

    What problem does this PR solve?

    Issue Number: close #30284 PR only for BR part review, the TiDB review please refer to: https://github.com/pingcap/tidb/pull/28763

    Problem Summary:

    What is changed and how it works?

    Check List

    Tests

    • [x] Unit test
    • [x] Integration test
    • [ ] Manual test (add detailed scripts or steps below)
    • [ ] No code

    Side effects

    • [ ] Performance regression: Consumes more CPU
    • [ ] Performance regression: Consumes more Memory
    • [ ] Breaking backward compatibility

    Documentation

    • [ ] Affects user behaviors
    • [ ] Contains syntax changes
    • [ ] Contains variable changes
    • [ ] Contains experimental features
    • [ ] Changes MySQL compatibility

    Release note

    None
    
    Reviewed by fengou1 at 2021-11-03 03:30
  • 6. Add PROXY protocol support

    Add PROXY protocol V1 and V2 support.

    usage: tidb-server --proxy-protocol-networks "*" --proxy-protocol-header-timeout 5

    Add --proxy-protocol-networks command parameter for PROXY protocol enable or disable. If you want to limit HAProxy server IP range, you can set --proxy-protocol-networks parameter to a CIDRs and split by ",". For example:

    tidb-server --proxy-protocol-networks "192.168.1.0/24,192.168.2.0/24"

    For more information about PROXY protocol please refer https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt

    Reviewed by blacktear23 at 2017-07-14 09:10
  • 7. test leak in TestInfo

    FAIL:TestInfo

    Bug Report

    Please answer these questions before submitting your issue. Thanks!

    1. What did you do? If possible, provide a recipe for reproducing the error. https://internal.pingcap.net/idc-jenkins/blue/rest/organizations/jenkins/pipelines/tidb_ghpr_unit_test/runs/24373/nodes/84/log/?start=0
    [2020-02-17T03:08:06.587Z] === RUN   TestInfo
    [2020-02-17T03:08:06.587Z] [2020/02/17 11:08:01.308 +08:00] [ERROR] [syncer.go:199] ["close session failed"] [] [stack="github.com/pingcap/tidb/ddl/util.(*schemaVersionSyncer).Done\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/ddl/util/syncer.go:199\ngithub.com/pingcap/tidb/domain.TestInfo\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain_test.go:150\ntesting.tRunner\n\t/usr/local/go/src/testing/testing.go:909"]
    [2020-02-17T03:08:06.587Z] [2020/02/17 11:08:01.311 +08:00] [ERROR] [syncer.go:199] ["close session failed"] [] [stack="github.com/pingcap/tidb/ddl/util.(*schemaVersionSyncer).Done\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/ddl/util/syncer.go:199\ngithub.com/pingcap/tidb/domain.(*Domain).loadSchemaInLoop\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain.go:485"]
    [2020-02-17T03:08:06.587Z] [2020/02/17 11:08:01.314 +08:00] [ERROR] [syncer.go:199] ["close session failed"] [] [stack="github.com/pingcap/tidb/ddl/util.(*schemaVersionSyncer).Done\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/ddl/util/syncer.go:199\ngithub.com/pingcap/tidb/domain.(*Domain).loadSchemaInLoop\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain.go:485"]
    [2020-02-17T03:08:06.587Z] [2020/02/17 11:08:01.318 +08:00] [ERROR] [syncer.go:199] ["close session failed"] [] [stack="github.com/pingcap/tidb/ddl/util.(*schemaVersionSyncer).Done\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/ddl/util/syncer.go:199\ngithub.com/pingcap/tidb/domain.(*Domain).loadSchemaInLoop\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain.go:485"]
    [2020-02-17T03:08:06.587Z] [2020/02/17 11:08:01.321 +08:00] [ERROR] [syncer.go:199] ["close session failed"] [] [stack="github.com/pingcap/tidb/ddl/util.(*schemaVersionSyncer).Done\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/ddl/util/syncer.go:199\ngithub.com/pingcap/tidb/domain.(*Domain).loadSchemaInLoop\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain.go:485"]
    [2020-02-17T03:08:06.587Z] [2020/02/17 11:08:01.324 +08:00] [ERROR] [syncer.go:199] ["close session failed"] [] [stack="github.com/pingcap/tidb/ddl/util.(*schemaVersionSyncer).Done\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/ddl/util/syncer.go:199\ngithub.com/pingcap/tidb/domain.(*Domain).loadSchemaInLoop\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain.go:485"]
    [2020-02-17T03:08:06.587Z] [2020/02/17 11:08:01.327 +08:00] [ERROR] [syncer.go:199] ["close session failed"] [] [stack="github.com/pingcap/tidb/ddl/util.(*schemaVersionSyncer).Done\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/ddl/util/syncer.go:199\ngithub.com/pingcap/tidb/domain.(*Domain).loadSchemaInLoop\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain.go:485"]
    [2020-02-17T03:08:06.587Z] [2020/02/17 11:08:01.330 +08:00] [ERROR] [syncer.go:199] ["close session failed"] [] [stack="github.com/pingcap/tidb/ddl/util.(*schemaVersionSyncer).Done\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/ddl/util/syncer.go:199\ngithub.com/pingcap/tidb/domain.(*Domain).loadSchemaInLoop\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain.go:485"]
    [2020-02-17T03:08:06.588Z] [2020/02/17 11:08:01.334 +08:00] [ERROR] [syncer.go:199] ["close session failed"] [] [stack="github.com/pingcap/tidb/ddl/util.(*schemaVersionSyncer).Done\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/ddl/util/syncer.go:199\ngithub.com/pingcap/tidb/domain.(*Domain).loadSchemaInLoop\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain.go:485"]
    [2020-02-17T03:08:06.588Z] [2020/02/17 11:08:01.337 +08:00] [ERROR] [syncer.go:199] ["close session failed"] [] [stack="github.com/pingcap/tidb/ddl/util.(*schemaVersionSyncer).Done\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/ddl/util/syncer.go:199\ngithub.com/pingcap/tidb/domain.(*Domain).loadSchemaInLoop\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain.go:485"]
    [2020-02-17T03:08:06.588Z] [2020/02/17 11:08:01.340 +08:00] [ERROR] [syncer.go:199] ["close session failed"] [] [stack="github.com/pingcap/tidb/ddl/util.(*schemaVersionSyncer).Done\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/ddl/util/syncer.go:199\ngithub.com/pingcap/tidb/domain.(*Domain).loadSchemaInLoop\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain.go:485"]
    [2020-02-17T03:08:06.588Z] [2020/02/17 11:08:01.343 +08:00] [ERROR] [syncer.go:199] ["close session failed"] [] [stack="github.com/pingcap/tidb/ddl/util.(*schemaVersionSyncer).Done\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/ddl/util/syncer.go:199\ngithub.com/pingcap/tidb/domain.(*Domain).loadSchemaInLoop\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain.go:485"]
    [2020-02-17T03:08:06.588Z] [2020/02/17 11:08:01.346 +08:00] [ERROR] [syncer.go:199] ["close session failed"] [] [stack="github.com/pingcap/tidb/ddl/util.(*schemaVersionSyncer).Done\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/ddl/util/syncer.go:199\ngithub.com/pingcap/tidb/domain.(*Domain).loadSchemaInLoop\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain.go:485"]
    [2020-02-17T03:08:06.588Z] [2020/02/17 11:08:01.349 +08:00] [ERROR] [syncer.go:199] ["close session failed"] [] [stack="github.com/pingcap/tidb/ddl/util.(*schemaVersionSyncer).Done\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/ddl/util/syncer.go:199\ngithub.com/pingcap/tidb/domain.(*Domain).loadSchemaInLoop\n\t/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain.go:485"]
    [2020-02-17T03:08:06.588Z] {"level":"warn","ts":"2020-02-17T11:08:01.350+0800","caller":"clientv3/retry_interceptor.go:61","msg":"retrying of unary invoker failed","target":"endpoint://client-516b5633-69d2-49d2-a3a5-8ed7da21c073/localhost:1525069566242647020","attempt":0,"error":"rpc error: code = NotFound desc = etcdserver: requested lease not found"}
    [2020-02-17T03:08:06.588Z] --- FAIL: TestInfo (2.75s)
    [2020-02-17T03:08:06.588Z]     leaktest.go:143: Test TestInfo check-count 50 appears to have leaked: github.com/pingcap/tidb/domain.(*Domain).loadSchemaInLoop(0xc0006026c0, 0x2faf080)
    [2020-02-17T03:08:06.588Z]         	/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain.go:469 +0x269
    [2020-02-17T03:08:06.588Z]         created by github.com/pingcap/tidb/domain.(*Domain).Init
    [2020-02-17T03:08:06.588Z]         	/home/jenkins/agent/workspace/[email protected]/go/src/github.com/pingcap/tidb/domain/domain.go:696 +0x59c
    [2020-02-17T03:08:06.588Z] FAIL
    
    1. What did you expect to see?

    2. What did you see instead?

    3. What version of TiDB are you using (tidb-server -V or run select tidb_version(); on TiDB)?

    Reviewed by wjhuang2016 at 2020-02-17 05:34
  • 8. tidb: support a plan cache for prepared statements

    Since prepared statements are compiled and optimized whenever they are executed, there is a room to reduce the execution time of the prepared statements.

    In order to do that we can compile a prepared statement once and reuse the compiled plan by converting parameter expressions to deferred ones, which are evaluated as late as possible, and storing the plan to a cache.

    The implentation has some limitations:

    • the prepared statements with limit expressions are not cached
    • the statistics related to the cache are not supported
    • on-demand methods for invalidating the cache are not supported
    Reviewed by dbjoa at 2017-07-31 11:28
  • 9. global_config: update pd version and client go version

    to adopt global config

    Signed-off-by: lemonhx [email protected]

    What problem does this PR solve?

    Issue Number: close #31218

    Problem Summary:

    What is changed and how it works?

    Check List

    Tests

    • [ ] Unit test
    • [ ] Integration test
    • [ ] Manual test (add detailed scripts or steps below)
    • [ ] No code

    Side effects

    • [ ] Performance regression: Consumes more CPU
    • [ ] Performance regression: Consumes more Memory
    • [ ] Breaking backward compatibility

    Documentation

    • [ ] Affects user behaviors
    • [ ] Contains syntax changes
    • [ ] Contains variable changes
    • [ ] Contains experimental features
    • [ ] Changes MySQL compatibility

    Release note

    None
    
    Reviewed by LemonHX at 2021-12-31 06:41
  • 10. executor,kv: support timebounded staleness transaction

    Signed-off-by: yisaer [email protected]

    What problem does this PR solve?

    Issue Number: ref https://github.com/pingcap/tidb/issues/19817

    Problem Summary: Support time bounded staleness transaction.

    What is changed and how it works?

    What's Changed: Support time bounded staleness transaction by:

    1. maintaining resolveTS for each store in an extra goroutine.
    2. support time-bounded staleness transaction in executeBegin

    Check List

    Tests

    • Unit test

    I have tested it with https://github.com/tikv/tikv/pull/9791, it seems work well.

    Release note

    • No release note
    Reviewed by Yisaer at 2021-04-06 09:29
  • 11. unit test TestSyncerSimple fails

    FAIL:TestSyncerSimple

    Bug Report

    Please answer these questions before submitting your issue. Thanks!

    1. What did you do? If possible, provide a recipe for reproducing the error.

    https://internal.pingcap.net/idc-jenkins/blue/organizations/jenkins/tidb_ghpr_check_2/detail/tidb_ghpr_check_2/23932/pipeline/

    https://internal.pingcap.net/idc-jenkins/blue/organizations/jenkins/tidb_ghpr_unit_test/detail/tidb_ghpr_unit_test/23968/pipeline/

    
    
    [2020-02-13T04:01:46.004Z] --- FAIL: TestSyncerSimple (12.90s)
    
    [2020-02-13T04:01:46.004Z]     syncer_test.go:119: get udpate version failed
    
    [2020-02-13T04:01:46.004Z] FAIL
    
    1. What did you expect to see?

    2. What did you see instead?

    3. What version of TiDB are you using (tidb-server -V or run select tidb_version(); on TiDB)?

    Reviewed by SunRunAway at 2020-02-13 09:00
  • 12. parser: support TOKUDB_ZSTD

    Enhancement

    In the tokudb, they add zstd(v1.1.0 release) TOKUDB_ZSTD as one of row format type and set zstd as table's(TokuDB) default compression algorithm.

    https://github.com/xelabs/tokudb/issues/2

    Reviewed by hawkingrei at 2022-08-07 15:56
  • 13. remove metrics in txn onStmtStart/onStmtEnd

    What problem does this PR solve?

    Issue Number: close #xxx

    Problem Summary:

    What is changed and how it works?

    Check List

    Tests

    • [ ] Unit test
    • [ ] Integration test
    • [ ] Manual test (add detailed scripts or steps below)
    • [ ] No code

    Side effects

    • [ ] Performance regression: Consumes more CPU
    • [ ] Performance regression: Consumes more Memory
    • [ ] Breaking backward compatibility

    Documentation

    • [ ] Affects user behaviors
    • [ ] Contains syntax changes
    • [ ] Contains variable changes
    • [ ] Contains experimental features
    • [ ] Changes MySQL compatibility

    Release note

    Please refer to Release Notes Language Style Guide to write a quality release note.

    None
    
    Reviewed by lcwangchao at 2022-08-07 13:45
  • 14. *: Improve point get performance for max ts optimization

    Enhancement

    Now we are using math.MaxUint64 as point get's read ts in an autocommit txn. In current implement, we still need to activate the inner transaction which will introduce some additional cost. We can avoid activating a new txn in above scene to save the cost.

    Reviewed by lcwangchao at 2022-08-07 10:37
  • 15. txn: optimize point get with tso MaxUint64 path in txn provider

    What problem does this PR solve?

    Issue Number: close #36951

    Problem Summary:

    What is changed and how it works?

    For short-path point get, avoid activating the inner txn to save the performance

    Release note

    Please refer to Release Notes Language Style Guide to write a quality release note.

    None
    
    Reviewed by lcwangchao at 2022-08-07 06:06
  • 16. statistics: batch insert topn and buckets to storage to speed up loading stats

    What problem does this PR solve?

    Issue Number: close #36947

    Problem Summary:

    What is changed and how it works?

    Batch insert topn and buckets to storage to speed up loading stats from JSON files.

    Check List

    Tests

    • [ ] Unit test
    • [ ] Integration test
    • [x] Manual test (add detailed scripts or steps below) Test the time of loading stats of several tables. Before the PR: batch1 After the PR: batch10
    • [ ] No code

    Side effects

    • [ ] Performance regression: Consumes more CPU
    • [ ] Performance regression: Consumes more Memory
    • [ ] Breaking backward compatibility

    Documentation

    • [ ] Affects user behaviors
    • [ ] Contains syntax changes
    • [ ] Contains variable changes
    • [ ] Contains experimental features
    • [ ] Changes MySQL compatibility

    Release note

    Please refer to Release Notes Language Style Guide to write a quality release note.

    None
    
    Reviewed by xuyifangreeneyes at 2022-08-06 12:40
  • 17. speed up load stats procedure

    Enhancement

    When loading stats from json file, each of TopN(Buckets) is inserted into mysql.stats_top_n(mysql.stats_buckets) by one internal insert SQL, which is inefficient. We can batch insert TopN(Buckets) to speed up load stats procedure.

    Reviewed by xuyifangreeneyes at 2022-08-06 12:35
A pure PHP implementation of the open Language Server Protocol. Provides static code analysis for PHP for any IDE.
A pure PHP implementation of the open Language Server Protocol. Provides static code analysis for PHP for any IDE.

A pure PHP implementation of the open Language Server Protocol. Provides static code analysis for PHP for any IDE.

Jul 10, 2022
This example shows how to estimate pi, using generated random numbers that uniformly distributed.
This example shows how to estimate pi, using generated random numbers that uniformly distributed.

php-estimatepi This example shows how to estimate pi, using generated random numbers that uniformly distributed. Every pair of numbers produced will b

Nov 26, 2021
A cross-language remote procedure call(RPC) framework for rapid development of high performance distributed services.

Motan Overview Motan is a cross-language remote procedure call(RPC) framework for rapid development of high performance distributed services. Related

Jul 28, 2022
A PHP 5.3+ and PHP 7.3 framework for OpenGraph Protocol

Opengraph Test with Atoum cd Opengraph/ curl -s https://getcomposer.org/installer | php php composer.phar install --dev ./vendor/atoum/atoum/bin/atoum

Feb 20, 2022
A PHP implementation of the Unleash protocol aka Feature Flags in GitLab.

A PHP implementation of the Unleash protocol aka Feature Flags in GitLab. This implementation conforms to the official Unleash standards and implement

Aug 18, 2021
An implementation of the Minecraft: Bedrock Edition protocol in PHP

BedrockProtocol An implementation of the Minecraft: Bedrock Edition protocol in PHP This library implements all of the packets in the Minecraft: Bedro

Jul 26, 2022
Spotweb is a decentralized usenet community based on the Spotnet protocol.

Spotweb is a decentralized usenet community based on the Spotnet protocol. Spotweb requires an operational webserver with PHP5.6 installed, it

Jul 21, 2022
Spotweb is a decentralized usenet community based on the Spotnet protocol.
Spotweb is a decentralized usenet community based on the Spotnet protocol.

Spotweb Spotweb is a decentralized usenet community based on the Spotnet protocol. Spotweb requires an operational webserver with PHP5.6 installed, it

Nov 29, 2021
> Create e-wallet, send money, withdraw and check balance all via USSD protocol
> Create e-wallet, send money, withdraw and check balance all via USSD protocol

Mobile Money USSD solution Create e-wallet, send money, withdraw and check balance all via USSD protocol Create e-wallet Step 1 Step 2 Step 3 Step 4 S

Nov 3, 2021
Configure Magento 2 to send email using Google App, Gmail, Amazon Simple Email Service (SES), Microsoft Office365 and many other SMTP (Simple Mail Transfer Protocol) servers
Configure Magento 2 to send email using Google App, Gmail, Amazon Simple Email Service (SES), Microsoft Office365 and many other SMTP (Simple Mail Transfer Protocol) servers

Magento 2 SMTP Extension - Gmail, G Suite, Amazon SES, Office 365, Mailgun, SendGrid, Mandrill and other SMTP servers. For Magento 2.0.x, 2.1.x, 2.2.x

Jul 22, 2022
Tars is a high-performance RPC framework based on name service and Tars protocol, also integrated administration platform, and implemented hosting-service via flexible schedule.

TARS - A Linux Foundation Project TARS Foundation Official Website TARS Project Official Website WeChat Group: TARS01 WeChat Offical Account: TarsClou

Jul 28, 2022
PHP Protobuf - Google's Protocol Buffers for PHP

This repository is no longer maintained Since Google's official Protocol Buffers supports PHP language, it's unjustifiable to maintain this project. P

Jul 26, 2022
Starless Sky is a network protocol for secure identities, providing the use of assymetric identities, public information, end-to-end messaging and smart contracts
Starless Sky is a network protocol for secure identities, providing the use of assymetric identities, public information, end-to-end messaging and smart contracts

Descentralized network protocol providing smart identity over an secure layer. What is the Starless Sky Protocol? Starless Sky is a network protocol f

Jun 19, 2022
This tool can write the monolog standard log directly to clickhouse in real time via the tcp protocol

log2ck This tool can write the monolog standard log directly to clickhouse in real time via the tcp protocol. If you can write regular rules, other st

Mar 26, 2022
Google Analytics Measurement Protocol Package for Symfony

Google Analytics Measurement Protocol Package for Symfony. Supports all GA Measurement Protocol API methods.

Jun 20, 2022
This example shows how to use Anychart library with the PHP programming language, Laravel framework and MySQL database.
This example shows how to use Anychart library with the PHP programming language, Laravel framework and MySQL database.

PHP basic template This example shows how to use Anychart library with the PHP programming language, Laravel framework and MySQL database. Running To

Jul 17, 2022
QueryHandler - Handling PDO ' s query with mySQL database

QueryHandler this class's method are static .... that mean you don't need to create an object to use it . All methodes will return an Exception if it

May 15, 2022
A forum software written in vanilla PHP with a MariaDB/MySQL database.

GloomyBB GloomyBB is a simple forum software written in vanilla PHP with a MariaDB/MySQL database. It is currently still in early development but is u

Feb 6, 2022
Free Functions To Connect To The Database ( Mysql ) For Php Programmers
Free Functions To Connect To The Database ( Mysql ) For Php Programmers

Update ?? The biggest update ever DB-php Free Functions To Connect To The Database ( Mysql ) For Php Programmers This Version : 2.0 connect to databas

May 27, 2022